zxcvbn15888 发表于 2020-7-2 13:08:08

第九讲第一题不知道为啥会这样

print("------------------------------100~999水仙花数------------------------------")
for num in range(100,1000):
   result = 0
   for i in str(num):
         result += int(i) ** 3
         if num == result:
             print(num)

运行以后是153 370 370 371 407 不知道为什么会出现两个370

Twilight6 发表于 2020-7-2 13:10:39

本帖最后由 Twilight6 于 2020-7-2 13:14 编辑




你试着代入就知道为什么了,当循环到 370 时候:

第一次循环 result 开始时等于 0 先加上 3 的 3次方 等于 27

第二次循环 result 等于 27 加上 7 的 三次方 等于 27+343这个时候已经等于了370 满足了 if 条件 进行一次打印

第三次循环 result 最后循环到了 0 的三次方 ,370+0还是等于370,再次满足 if 条件 进行一次打印



qiuyouzhi 发表于 2020-7-2 13:15:14

楼上正解,把代码改成这样就行:

print("------------------------------100~999水仙花数------------------------------")
for num in range(100,1000):
    result = 0
    for i in str(num):
      result += int(i) ** 3
      if num == result:
            print(num)
            break

zxcvbn15888 发表于 2020-7-2 13:16:49

Twilight6 发表于 2020-7-2 13:10
你试着代入就知道为什么了,当循环到 370 时候:

第一次循环 result 开始时等于 0 先加上 3 的 3 ...

噢 明白了 谢谢

zxcvbn15888 发表于 2020-7-2 13:17:24

qiuyouzhi 发表于 2020-7-2 13:15
楼上正解,把代码改成这样就行:

谢谢
页: [1]
查看完整版本: 第九讲第一题不知道为啥会这样