鱼C论坛

 找回密码
 立即注册
查看: 4866|回复: 5

[已解决]零基础学pyhone第九课课后作业问题

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

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

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

x
求水仙花数中
sum = sum + (temp%10) ** 3
temp //= 10         # 注意这里要使用地板除哦

这段代码看不懂啊
sum不是赋值0吗,temp是100之999间取值,比如我取一个值123
按第一段代码sum最后等于0加上,temp除10的余数,3的3次幂,等于9
水仙花数的计算,123不是应该1的3次幂,加2的3次幂,加3的3次幂,最后等于36
temp //= 10,得出整数12又是派什么用处呢

这两段代码怎么得到正确的水仙花数呢

完整的源代码:
for i in range(100, 1000):
   
sum = 0
   
temp = i
   
while temp:
        
           sum = sum + (temp%10) ** 3
        
            temp //= 10         # 注意这里要使用地板除哦~
   
if sum == i:
        
           print(i)

这段代码怎么得到水仙花数的,看不明白啊,我哪理解错误了。
最佳答案
2017-12-26 15:03:15
我估计你感到困惑的应该是里面的while循环
while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10

temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
(temp % 10) ** 3 表示这个数字的三次方,比如 2 ** 3 == 2 * 2 * 2 == 8
temp //= 10 表示temp右移1位,比如 123 // 10 == 12,234 // 10 == 23,地板除的意思是整除,只取整数部分而去掉小数部分

所以整个while循环的操作就是,拿temp=543举个例子
第一次循环
sum = 0 + 3 ** 3 = 9
temp = 54
第二次循环
sum = 9 + 4**3 = 9 + 64 = 73
temp = 5
第三次循环
sum = 73 + 5**3 = 73 + 125 = 198
temp = 0
第四次循环条件判定失败,跳出while循环,最终sum == 198
后续的判定中sum != 543
所以543不是水仙花数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-26 14:23:37 | 显示全部楼层
不是有个 while循环吗? 你 temp = 12,又进入while循环, sum = 3的3次方 + 2的三次方。temp //= 10 = 1,然后又进入while循环,不然你以为这个while给来做什么的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-26 14:27:55 | 显示全部楼层
while循环不是结束了吗,不是应该再从for开始吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-26 15:03:15 | 显示全部楼层    本楼为最佳答案   
我估计你感到困惑的应该是里面的while循环
while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10

temp % 10 得到的是temp这个值的个位数字,比如 111 % 10 == 1,234 % 10 == 4
(temp % 10) ** 3 表示这个数字的三次方,比如 2 ** 3 == 2 * 2 * 2 == 8
temp //= 10 表示temp右移1位,比如 123 // 10 == 12,234 // 10 == 23,地板除的意思是整除,只取整数部分而去掉小数部分

所以整个while循环的操作就是,拿temp=543举个例子
第一次循环
sum = 0 + 3 ** 3 = 9
temp = 54
第二次循环
sum = 9 + 4**3 = 9 + 64 = 73
temp = 5
第三次循环
sum = 73 + 5**3 = 73 + 125 = 198
temp = 0
第四次循环条件判定失败,跳出while循环,最终sum == 198
后续的判定中sum != 543
所以543不是水仙花数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-26 15:04:35 | 显示全部楼层
qiyong51 发表于 2017-12-26 14:27
while循环不是结束了吗,不是应该再从for开始吗

while temp
第一个//后 是12  while依然为真
以此类推  最终将123 这三个数字分别取出来 **3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-26 15:59:50 | 显示全部楼层
while temp:
        
           sum = sum + (temp%10) ** 3
        
            temp //= 10      
比如你说的取数123,
第一步 while  123:(进入循环)
           sum = sum + (temp%10) ** 3=27(sum=0+3**3,temp%10相当于取123的个位数字)
           temp//=10(此temp=12)
第二步 while  12:
           sum = sum + (temp%10) ** 3=35(sum=27+2**3,temp%10相当于取123的十位数字)
           temp//=10(此temp=1)
第三步 while 1:
           sum = sum + (temp%10) ** 3=36(sum=35+1**3,temp%10相当于取123的百位数字)
           temp//=10(此temp=0)
第四步 while  0:。。。。结束循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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