xinrenxuepy 发表于 2020-12-21 03:45:14

第009课后题手动1的思路哪位大神给解答下,谢谢

for i in range(100,1000):
    sum = 0                                  这里的sum = 0 不理解
    temp = i
    while temp:
      sum = sum + (temp%10) ** 3          这个公式也没明白
      temp //= 10
    if sum == i:
      print(i)

洋洋痒 发表于 2020-12-21 03:59:42

sum=0是给sum设置一个初始值
temp%10temp最开始是一个三位数,对10取余数得到的就是各位数字比如248除以10余8174除以10余4,这一步就把个位数的三次幂加到sum里了
然后再temp//10 temp地板除以10就是得到有原来百位和十位组成的一个两位数,比如海华丝248//10=28    174//10=17
然后进入while下一次循环,此时temp已经是两位数字了sum = sum + (temp%10) ** 3   这个同上一步,但是现在temp%10得到的是原来十位上的数字因为上一步temp=248//10=28现在temp%10=8,就是原来三位数的十位数字,现在又把十位的三次幂加到sum里了
同理下一步就把原来数字的百位的三次幂加进sum里,最后temp只剩下一位,temp//10=0,然后while temp就变成while False了就不再执行while循环了



{:5_109:}说的有点罗嗦,但我不知道你哪一步没有理解所以都给说一下

xinrenxuepy 发表于 2020-12-21 04:13:25

洋洋痒 发表于 2020-12-21 03:59
sum=0是给sum设置一个初始值
temp%10temp最开始是一个三位数,对10取余数得到的就是各位数字比如248除以 ...

经过您的讲解,我了解到了为啥temp=0的时候会是循环结束了,因为0即是flase,1是ture,对吗?
然后我下面这么理解是对的吗,我感觉跟你说的差不多
循环第一次,是百位数的三次幂的运算结果,
然后经过一次temp //= 10的地板除法运算,
再次循环,是十位数的三次幂运算结果,
最后再经过一次temp //= 10 的地板除法,
第三次循环计算个位数的三次幂运算结果,
最后算出的sum的值就是水仙花数的个位、十位、百位的三次幂的结果之和
等于i,就打印出来。

xinrenxuepy 发表于 2020-12-21 04:16:57

洋洋痒 发表于 2020-12-21 03:59
sum=0是给sum设置一个初始值
temp%10temp最开始是一个三位数,对10取余数得到的就是各位数字比如248除以 ...

感谢大佬

洋洋痒 发表于 2020-12-21 05:13:57

说反了,第一次是个位,第二次是十位,第三次是百位
(temp%10) ** 3最开始temp%10意思是最开始的三位数temp除以10取余数,得到的是个位数

洋洋痒 发表于 2020-12-21 05:18:28

举个例子153
最开始sum=0
然后第一次循环,153%10=3,是个位数sum=3**3
然后153//10=15
15%10=5,5是十位数,此时sum=sum+5**3=134
然后15//10=1,1是原来的百位数。1%10=1,sum=sum+1**3=135
然后1//10=0
然后while 0循环就结束了

洋洋痒 发表于 2020-12-21 05:20:26

python把 0 False None 空字符串 空列表 空字典 空元组都当作假的

xinrenxuepy 发表于 2020-12-25 03:35:59

洋洋痒 发表于 2020-12-21 05:18
举个例子153
最开始sum=0
然后第一次循环,153%10=3,是个位数sum=3**3


谢谢

xinrenxuepy 发表于 2020-12-25 03:36:31

洋洋痒 发表于 2020-12-21 05:20
python把 0 False None 空字符串 空列表 空字典 空元组都当作假的

明白了,感谢
页: [1]
查看完整版本: 第009课后题手动1的思路哪位大神给解答下,谢谢