乌龟大哥 发表于 2020-2-17 16:00:09

解水仙花数求助

求水仙花数这个帖子看不太懂诶,麻烦理解的鱼油讲解一下呗

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

塞利格曼的狗 发表于 2020-2-17 16:12:07

我也是新人,昨晚做了这个。
我的理解就是通过把 i 除以 10 求余数,得到个位数
循环三次得到个、十、百位数(中间用地板除把比如153变成15方便求下一位)

但是我也想问的是为什么一开始要sum=0

qiuyouzhi 发表于 2020-2-17 16:19:25

因为最后打印的是i,sum只是一个测试它是不是水仙花数的变量
所以用完后必须要重新赋值为0

jackz007 发表于 2020-2-17 16:45:35

本帖最后由 jackz007 于 2020-2-17 16:48 编辑

      本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循环 3 次,循环体中的语句也会执行 3 次:
for i in range (100 , 1000):
    sum = 0
    temp = i
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的个位
    temp = temp // 10               # temp = i // 10,i 的个位被舍弃,i 的百位、十位依序变为 temp 的十位、个位
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的十位
    temp = temp // 10               # temp = i // 100,i 的十位、个位被舍弃,i 的百位变为 temp 的个位
    sum = sum + (temp % 10) ** 3      # (temp % 10) 得到 i 的百位
    temp = temp // 10               # temp 的值为 0
    if i == sum:
      print(i)

c595586320 发表于 2020-2-17 17:01:04

jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...

谢谢老哥

你知道吗我会 发表于 2020-2-17 18:03:26

jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...

为什么会循环3次啊 不是100-999吗,扎心我还是没看懂……

Sungne_jer 发表于 2020-2-17 18:44:42

这个答案超赞

乌龟大哥 发表于 2020-2-17 19:35:10

jackz007 发表于 2020-2-17 16:45
本题对初学者而言,不太好理解的是 while temp 循环,这里把它展开,因为 i 是 3 位数,所以,会循 ...

谢谢讲解,明白啦

酒醉三分醒 发表于 2020-2-17 22:52:11

你知道吗我会 发表于 2020-2-17 18:03
为什么会循环3次啊 不是100-999吗,扎心我还是没看懂……

我的理解是:
因为是三位数,比如i=153,赋值给 temp,
第一次while循环:temp%10得到3,然后sum=3**3=27,然后153地板除10后为15
进入第二次循环,此时temp%10即15%10等于5,然后sum=27 + 5**3=152,然后15地板除10后为1
进入第三次循环,此时temp%10即1%10等于5,然后sum=152 + 1=153,然后1地板除后为0
因为此时temp值为0,即代表"False",而while False会终止循环,所以一共循环3次

你知道吗我会 发表于 2020-2-18 11:51:23

酒醉三分醒 发表于 2020-2-17 22:52
我的理解是:
因为是三位数,比如i=153,赋值给 temp,
第一次while循环:temp%10得到3,然后sum=3**3= ...

终于懂了!感谢!!!
页: [1]
查看完整版本: 解水仙花数求助