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) j和i的用法是一样的
两个嵌套循环是要生成333,4444,55555
sum就把他们相加 假设i=3的话 下面内个j怎么循环啊 而且下面内个x就等于3*10+3了 是33而不是333欸,,{:10_266:} 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: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
....
....
...
.. 灰晨 发表于 2021-6-19 10:36
这代码本身就错了吧,算出来结果都不对
变成了1+222+3333+44444+555555了
昂 我不是杠精{:10_266:}你听我解释 不要动怒{:10_266:} 这个代码是我书本上的 我觉得我没敲错 但是我也运行不出来 但我觉得我和我课本上的差不多啊{:10_266:} 然后你的解释我看得懂 就是内个j控制的是循环的次数呗?。。然后你的代码我运行了一遍 结果是60355 我书本上的结果是603555 少了个五{:10_266:} 本帖最后由 灰晨 于 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: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:15 编辑
j这个参数就是用来控制循环次数的,给你将x通过你的x*10+i变成333,4444,55555这样的数字,但是跑你的代码这个结果相加有60万,代码有问题,改成for j in range(1,i):控制位数 首先我个人认为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: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]