白驹过隙0809 发表于 2020-8-3 10:37:23

关于09讲的水仙花数

def flower():
    for i in range(100,1000):
      for t in str(i):
            if sum(int(t)**3) == i:
                print(i,end=' ')
我想问下,我这代码错在哪里,要怎么修改呀
      
      

zltzlt 发表于 2020-8-3 10:38:40

照你的思路代码应该这样改:

def flower():
    for i in range(100, 1000):
      s = 0
      for t in str(i):
            s += int(t) ** 3
      if s == i:
            print(s)

Hoiste 发表于 2020-8-3 10:44:30

错误原因是每次循环因子t代表的数字仅仅只是三位数之中的某一位,所以if条件是总不能成立的,sum这个方法相当于没有用到,你需要用一个变量如x = 0,每一次循环将t的三次方加进去,最后判断这个x是否等于i,才是正确的做法。

XSC1997 发表于 2020-8-3 10:44:58

print("…………求100-999之间的所有水仙花数…………")
#如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数
for i in range(100,999,1):
      a = i%10
      b = i%100//10
      c = i//100
      if(i==a**3+b**3+c**3):
          print(i)
print("结束")

这是我自己的代码,感觉这样很直白

sunrise085 发表于 2020-8-3 10:50:43

你的if条件中t是i的一位,对i的一位进行求和肯定没有符合条件的。实际上你的sum没有什么用,因为每次内层循环计算的只有一位,根本用不到求和,需要将i的三位进行求和
def flower():
    for i in range(100,1000):
      if sum(int(t)**3 for t in list(str(i)))==i:
            print(i,end=' ')
flower()
页: [1]
查看完整版本: 关于09讲的水仙花数