鱼C论坛

 找回密码
 立即注册
查看: 3638|回复: 10

for语句

[复制链接]
发表于 2021-6-19 09:59:18 | 显示全部楼层 |阅读模式
16鱼币
请问这个循环语句中的 333和4444和55555怎么算出来的 还有就是内个j是干啥用的啊?我不太理解 🙏希望有个人指导下
题目是用循环语句求1+22+333+4444+55555的和
sum=1
for i in range(2,6):
    x=i
    for j in range(1,i+1):
           x=x*10+i
     sum+=x
print("1+22...+55555的和为:%d" %sum)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-19 10:01:28 | 显示全部楼层
j和i的用法是一样的

两个嵌套循环是要生成333,4444,55555

sum就把他们相加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-19 10:04:33 | 显示全部楼层
假设i=3的话 下面内个j怎么循环啊 而且下面内个x就等于3*10+3了 是33而不是333欸,,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-19 10:10:10 From FishC Mobile | 显示全部楼层
ww冲冲 发表于 2021-6-19 10:04
假设i=3的话 下面内个j怎么循环啊 而且下面内个x就等于3*10+3了 是33而不是333欸,,

3*10+3=33
33*10+3=333
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-19 10:36:59 | 显示全部楼层
本帖最后由 灰晨 于 2021-6-19 10:55 编辑

这代码本身就错了吧,算出来结果都不对
变成了1+222+3333+44444+555555了
  1. sum=1
  2. for i in range(2,6):
  3.     x=i
  4.     for j in range(1,i):
  5.         x=x*10+i
  6.         print(x)
  7.     sum+=x
  8.     print(sum)
  9. print("1+22...+55555的和为:%d" %sum)
复制代码

把for j in range(1,i+1):改成for j in range(1,i):先
之后运行,sum=1

for i in range(2,6):第一次循环
x=2,
for j in range(1,i)=for j in range(1,2)这里j不用管他,这里就是要一个for循环而已,range(1,2)说明这个循环就循环1次
x=x*10+i = 2*10+2 = 22
循环一次结束
sum+=x
sum = sum + x = 1+ 22 =23

for i in range(2,6):第二次循环
x = 3
for j in range(1,i)=for j in range(1,3),range(1,3)说明这个循环,循环2次
x=x*10+i = 3 *10+3=33
x=x*10+i = 33 *10 +3 =333
循环两次结束
sum+=x
sum = sum + x = 23 + 333 = 356

for i in range(2,6):第三次循环
x = 4
....
....
...
..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-19 11:12:43 | 显示全部楼层
灰晨 发表于 2021-6-19 10:36
这代码本身就错了吧,算出来结果都不对
变成了1+222+3333+44444+555555了

昂 我不是杠精你听我解释 不要动怒 这个代码是我书本上的 我觉得我没敲错 但是我也运行不出来 但我觉得我和我课本上的差不多啊 然后你的解释我看得懂 就是内个j控制的是循环的次数呗?。。然后你的代码我运行了一遍 结果是60355 我书本上的结果是603555 少了个五
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-19 11:32:29 | 显示全部楼层
本帖最后由 灰晨 于 2021-6-19 12:00 编辑
ww冲冲 发表于 2021-6-19 11:12
昂 我不是杠精你听我解释 不要动怒 这个代码是我书本上的 我觉得我没敲错 但是我也 ...


你用计算机敲1+22+333+4444+55555和1+222+3333+44444+555555分别等于多少
range(1,i+1)就是多循环一次
i =2时
x = 2*10+2=22
x = 22*10+2=222
i =3时
x = 3*10+3=33
x = 33*10+3=333
x = 333*10+3=3333
....
其他没区别的
运行不出来注意下缩进
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-19 13:12:33 | 显示全部楼层
本帖最后由 阿奇_o 于 2021-6-19 13:24 编辑

不确定,就打印出来看看呀
  1. s = 1
  2. for i in range(2, 6):
  3.     x = i
  4.     for _ in range(1, i):  # 不是 i+1,因为i本身从2开始  (其次,j 用不到,可以用 _ 代表或其任何有效标志符代表range()内的一个元素)
  5.         x = x*10 + i
  6.     print(x)    # 打印出来看看,看是否是正确的
  7.     s = s + x

  8. print("结果是:", s)
复制代码



ps:如果你会“列表推导式”,这其实一行代码就可以了,
  1. print(sum([int(str(i)*i) for i in range(1,6)]))
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-21 17:12:38 | 显示全部楼层
本帖最后由 永无指境 于 2021-6-21 17:15 编辑

j这个参数就是用来控制循环次数的,给你将x通过你的x*10+i变成333,4444,55555这样的数字,但是跑你的代码这个结果相加有60万,代码有问题,改成for j in range(1,i):控制位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-21 18:11:19 | 显示全部楼层
首先我个人认为for j in range(1,i+1) 中i+1 应该改为 i
sum=1
for i in range(2,6):
    x=i
    for j in range(1,i):      
        x=x*10+i
    sum = x + sum
print("1+22...+55555的和为:%d" %sum)
这是我认为正确的代码

我先回答第一个问题
第一次循环时 sum = 1   i = 2 然后 x = i =2
然后for j in range 这个循环开始 括号里此时为(1,2) 可以取1不可取2 说明这个循环只进行一次
然后 x = 2*10 +2 =22
sum = 1+22
然后开始第二次循环
此时 i = 3
for j in range() 扣号中变为(1,3)可取1,2说明这个for循环循环俩次
第一次 x = 3*10 + 3 =33
然后再进行一次 x = 33 *10 + 3 = 333
然后for j这个循环结束 sum = 1 + 22 +333
由此类推之后 i = 4 ,i =5也是一样道理

第二个问题 j : 它作为一个变量 来决定下面的次数 也就是让下面的 x = x*10 + i 循环几次
相信你看我上面的回答可以看懂
如果答案有用 请设置为最佳答案 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-21 20:33:09 | 显示全部楼层
本帖最后由 染上灬网络 于 2021-6-21 20:35 编辑
ww冲冲 发表于 2021-6-19 11:12
昂 我不是杠精你听我解释 不要动怒 这个代码是我书本上的 我觉得我没敲错 但是我也 ...


你的答案之所以多了一个5是因为for j in range(1,i+1)这句代码中的i+1,而别人是把i+1改成了i,导致结果比你少了一位。

你可以在程序中加一句print一句,这样就可以看到这个过程是怎么样的。如下:

sum=1
for i in range(2,6):
    x=i
    for j in range(1,i+1):
           x=x*10+i
           print(x)
    sum+=x
print("1+22...+55555的和为:%d" %sum)

每运行一次,输出的结果如下:
22
222
33
333
3333
44
444
4444
44444
55
555
5555
55555
555555
1+22...+55555的和为:603555

其余部分,相信你看其他人的解释应该很清楚了。。。

另外再说一句,如果按照你的题目,求1+22...+55555的和,代码中的i+1是错的。。应该是i。

如果题目改为1+222+3333+44444+555555的和,那你的代码才是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 00:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表