ww冲冲 发表于 2021-6-19 09:59:18

for语句

请问这个循环语句中的 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)

xiaosi4081 发表于 2021-6-19 10:01:28

j和i的用法是一样的

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

sum就把他们相加

ww冲冲 发表于 2021-6-19 10:04:33

假设i=3的话 下面内个j怎么循环啊 而且下面内个x就等于3*10+3了 是33而不是333欸,,{:10_266:}

wp231957 发表于 2021-6-19 10:10:10

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

3*10+3=33
33*10+3=333

灰晨 发表于 2021-6-19 10:36:59

本帖最后由 灰晨 于 2021-6-19 10:55 编辑

这代码本身就错了吧,算出来结果都不对
变成了1+222+3333+44444+555555了
sum=1
for i in range(2,6):
    x=i
    for j in range(1,i):
      x=x*10+i
      print(x)
    sum+=x
    print(sum)
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
....
....
...
..

ww冲冲 发表于 2021-6-19 11:12:43

灰晨 发表于 2021-6-19 10:36
这代码本身就错了吧,算出来结果都不对
变成了1+222+3333+44444+555555了



昂 我不是杠精{:10_266:}你听我解释 不要动怒{:10_266:} 这个代码是我书本上的 我觉得我没敲错 但是我也运行不出来 但我觉得我和我课本上的差不多啊{:10_266:} 然后你的解释我看得懂 就是内个j控制的是循环的次数呗?。。然后你的代码我运行了一遍 结果是60355 我书本上的结果是603555 少了个五{:10_266:}

灰晨 发表于 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
....
其他没区别的
运行不出来注意下缩进

阿奇_o 发表于 2021-6-19 13:12:33

本帖最后由 阿奇_o 于 2021-6-19 13:24 编辑

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

print("结果是:", s)


ps:如果你会“列表推导式”,这其实一行代码就可以了,
print(sum())

{:10_333:}

永无指境 发表于 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):控制位数

Mzzith 发表于 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 循环几次
相信你看我上面的回答可以看懂
如果答案有用 请设置为最佳答案 谢谢

染上灬网络 发表于 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的和,那你的代码才是正确的。
页: [1]
查看完整版本: for语句