课后作业009 了不起的分支和循环3
for i in range(100, 1000):sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意这里要使用地板除哦~
if sum == i:
print(i)
请问 temp //=10 是不是就等于 temp = temp//10
第一个循环 sum = sum + (temp%10) ** 3 不就等于 0 = 0 + (100%10) ** 3,sum 还是为0, 然后temp 变成10 了,继续循环 ,sum还是为0,temp变成1了。 请问是这样吗? 如果是那后面怎么算,如果不是,请问哪里不对?
本帖最后由 梁小烦恼 于 2021-10-5 23:29 编辑
和你一样是新手,也正好学到这,说说我的看法,它这里其实是两个循环,一个是for循环,一个是while循环,while循环是嵌套在for循环里面的,你上面的理解没有错,在第一次执行的时候,确实是你说的那样,在while循环中,第一次temp是100,第二次是10,第三次是1,第四次是0,跳出while循环执行if,发现sum!=i,进入下一个for循环,也就是temp=101的时候。又是4次while循环后,进入再下一个for训话,temp=102.
直到temp=153的时候,你代入算式,在temp=153时的第一个while,sum=0+(153%10)**3,也就是=27,接着temp//10 =15,sum= 9+(15%10)**3= 9+5**3 = 27+125 = 152,同样的,temp//10 = 15//10 =1,那么sum = 152 +(1%10)**3 =152+1=153。第4次while,temp小于0,跳出while,判断if,sum== i,打印,进入下一个for循环,也就是temp= 154,
这个一个我觉得算是优化过的数学模型了,我自己写的一个没有优化过的,很直接,你可以看看,我认为这道题你的问题在于这个数学模型的建立有疑问,语法和其他是没有问题的。
for i in range(100, 1000):
while i:
sum = (i//100)**3 + (i//10-(i//100)*10)**3 + (i-(i//10)*10)**3
if sum == i:
print(i)
break
else:
break
梁小烦恼 发表于 2021-10-5 23:25
和你一样是新手,也正好学到这,说说我的看法,它这里其实是两个循环,一个是for循环,一个是while循环,wh ...
谢谢解答,看了你的解释差不多懂了,不过还有一个问题 就是1//10 和 1%10这两个怎么计算? 结果都为0 吗 二十又几 发表于 2021-10-6 19:15
谢谢解答,看了你的解释差不多懂了,不过还有一个问题 就是1//10 和 1%10这两个怎么计算? 结果都为0 ...
//是取整,就相当于是我们小学没学小数前商多少余数多少比如12//10 商就为1 余数是2所以11//10结果为1
%是取余,在Python中是向下圆整,即远离0的方向,所以1//10为1 12%10为2 -12%10为8 本帖最后由 梁小烦恼 于 2021-10-7 22:50 编辑
二十又几 发表于 2021-10-6 19:15
谢谢解答,看了你的解释差不多懂了,不过还有一个问题 就是1//10 和 1%10这两个怎么计算? 结果都为0 ...
共同学习,共同进步,//是除了以后取整啊,举个例子,6//4=6除以4等于1.5再取整数(相当于把小数点后的数字去掉)最后得到1,所以1//10=1除以10等于0.1再去掉小数点后的数字,那么就是0。
%就是取余数,你要知道一个数除以另一个比它大的数,它的余数就是它自己,所以1%10=1,再举几个例子
>>> 12%13
12
>>> 2%3
2
>>> 5%10
5
看明白了吗?
页:
[1]