mlucy3636 发表于 2021-1-9 16:55:16

请教 新版Python 第18课课后作业

本帖最后由 mlucy3636 于 2021-1-9 17:00 编辑

0. 编写一个程序,求解 100~999 之间的所有水仙花数。

for i in range(100, 1000):
    sum = 0
    temp = i
   
    while temp:
      sum = sum + (temp % 10) ** 3
      temp //= 10
   
    if sum == i:
      print(i)

虽然小甲鱼给出了一些解释,但我这个菜鸟还是看不懂!{:5_94:}

搞不懂程序是如何运算的,每一步如何执行循环过程,麻烦大神举例说明(比如i=153)
越详细越好{:9_221:}

mlucy3636 发表于 2021-1-9 17:03:22

我自己的理解(例如i=153):
sum=0
temp=153
sum=0+(153 % 10)**3=0+3**3=9
temp=153 // 10=15
上面我理解的对吗?
然后再如何循环?就不懂了。。。。。。

昨非 发表于 2021-1-9 17:05:49

本帖最后由 昨非 于 2021-1-9 17:07 编辑

看看这个的最佳答案,讲的十分详细
<font color="red">[已解决]</font>python009课后习题的水仙花数程序看不懂
https://fishc.com.cn/thread-171563-1-1.html
(出处: 鱼C论坛)


论坛主页搜索“水仙花”,就有你想要的解释,所以要善用论坛的搜索功能哦

行人不止 发表于 2021-1-9 17:43:28

因为while temp:执行循环,
接下来就是:
sum=3**3
temp=15
sum=3**3+(15 % 10)**3=3**3+5**3
temp=15// 10=1
再循环:
sum=3**3+5**3
temp=1
sum=3**3+5**3+(1% 10)**3=3**3+5**3+1**3
temp=1// 10=0
此时temp<0跳出循环。
循环第一次得到个位的3次方
循环第二次得到个位的3次方与十位的3次方的和
第三次得到个位的3次方与十位的3次方与百位3次方的和

mlucy3636 发表于 2021-1-10 15:02:13

行人不止 发表于 2021-1-9 17:43
因为while temp:执行循环,
接下来就是:
sum=3**3


谢谢你~
页: [1]
查看完整版本: 请教 新版Python 第18课课后作业