鱼C论坛

 找回密码
 立即注册
查看: 1784|回复: 8

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

[复制链接]
发表于 2020-12-21 03:45:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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%10  temp最开始是一个三位数,对10取余数得到的就是各位数字比如248除以10余8  174除以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循环了



说的有点罗嗦,但我不知道你哪一步没有理解所以都给说一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-21 03:59:42 | 显示全部楼层    本楼为最佳答案   
sum=0是给sum设置一个初始值
temp%10  temp最开始是一个三位数,对10取余数得到的就是各位数字比如248除以10余8  174除以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循环了



说的有点罗嗦,但我不知道你哪一步没有理解所以都给说一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

经过您的讲解,我了解到了为啥temp=0的时候会是循环结束了,因为0即是flase,1是ture,对吗?
然后我下面这么理解是对的吗,我感觉跟你说的差不多
循环第一次,是百位数的三次幂的运算结果,
然后经过一次temp //= 10的地板除法运算,
再次循环,是十位数的三次幂运算结果,
最后再经过一次temp //= 10 的地板除法,
第三次循环计算个位数的三次幂运算结果,
最后算出的sum的值就是水仙花数的个位、十位、百位的三次幂的结果之和
等于i,就打印出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 05:13:57 | 显示全部楼层
说反了,第一次是个位,第二次是十位,第三次是百位
(temp%10) ** 3最开始temp%10意思是最开始的三位数temp除以10取余数,得到的是个位数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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循环就结束了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-21 05:20:26 | 显示全部楼层
python把 0 False None 空字符串 空列表 空字典 空元组都当作假的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-25 03:35:59 | 显示全部楼层
洋洋痒 发表于 2020-12-21 05:18
举个例子153
最开始sum=0
然后第一次循环,153%10=3,是个位数sum=3**3

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

使用道具 举报

 楼主| 发表于 2020-12-25 03:36:31 | 显示全部楼层
洋洋痒 发表于 2020-12-21 05:20
python把 0 False None 空字符串 空列表 空字典 空元组都当作假的

明白了,感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 01:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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