majian890324 发表于 2020-5-6 17:14:15

python课后作业第009讲,求水仙花数,看不明白呀

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

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数

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

小甲鱼老师Python课后题009讲的求水仙花数,我研究了1个小时,怎么都看不明白!哪位大佬能讲解一下吗?通俗易懂的!这个是真看不明白,哎!可能是我脑子太笨了

zltzlt 发表于 2020-5-6 17:16:49

https://fishc.com.cn/thread-105546-1-1.html

qiuyouzhi 发表于 2020-5-6 17:20:23

没事,我刚学的时候也是这样。
因为水仙花是每位的立方之和为这个数的数,
所以,要用一个sum,存储每位立方和。
用temp是因为我们要修改i这个数,如果把i修改了,
最后还需要比较一下呢,所以,用temp做个备份。
然后就是while循环了,先说一下%10和//10:
>>> 153 % 10 # 取出最后一位
3
>>> 153 // 10 # 去掉最后一位
15
>>> # 因为//10迟早会让153变为0,所以我们加一个while循环,也就是说,
>>> # 只要temp不为0,就一直取位+去掉一位。
>>> # **我想不用说了,就是x的y次方
>>> 2 ** 3 # 2 的 3次方
8
最后,再进行一个判断(sum是否等于这个数)就好了。

莫待无花空折枝 发表于 2020-5-7 13:39:59

小甲鱼做的理解不难
我自己是这样写的
for i in range(100,1000):
    j = i//100
    k = i%10
    l = i//10%10
    if i==j**3+k**3+l**3:
      print(i)
    else:
      continue

zwhe 发表于 2020-5-29 10:10:05

{:7_145:}

kkk1029 发表于 2020-5-29 22:03:22

for z in range(0,10):
   for y in range(0,10):
       for x in range(1,10):
         if x**3+y**3+z**3==x*100+y*10+z:
               print(x*100+y*10+z)

kkk1029 发表于 2020-5-29 22:06:47

本帖最后由 kkk1029 于 2020-5-30 10:26 编辑

根据水仙花后面的例子(三色球)的思路改编过来
页: [1]
查看完整版本: python课后作业第009讲,求水仙花数,看不明白呀