鱼C论坛

 找回密码
 立即注册
查看: 952|回复: 4

[已解决]关于09讲的水仙花数

[复制链接]
发表于 2020-8-3 10:37:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def flower():
    for i in range(100,1000):
        for t in str(i):
            if sum(int(t)**3) == i:
                print(i,end=' ')
我想问下,我这代码错在哪里,要怎么修改呀
        
        
最佳答案
2020-8-3 10:38:40
照你的思路代码应该这样改:

  1. def flower():
  2.     for i in range(100, 1000):
  3.         s = 0
  4.         for t in str(i):
  5.             s += int(t) ** 3
  6.         if s == i:
  7.             print(s)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-3 10:38:40 | 显示全部楼层    本楼为最佳答案   
照你的思路代码应该这样改:

  1. def flower():
  2.     for i in range(100, 1000):
  3.         s = 0
  4.         for t in str(i):
  5.             s += int(t) ** 3
  6.         if s == i:
  7.             print(s)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-3 10:44:30 | 显示全部楼层
错误原因是每次循环因子t代表的数字仅仅只是三位数之中的某一位,所以if条件是总不能成立的,sum这个方法相当于没有用到,你需要用一个变量如x = 0,每一次循环将t的三次方加进去,最后判断这个x是否等于i,才是正确的做法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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("结束")

这是我自己的代码,感觉这样很直白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-3 10:50:43 | 显示全部楼层
你的if条件中t是i的一位,对i的一位进行求和肯定没有符合条件的。实际上你的sum没有什么用,因为每次内层循环计算的只有一位,根本用不到求和,需要将i的三位进行求和
  1. def flower():
  2.     for i in range(100,1000):
  3.         if sum(int(t)**3 for t in list(str(i)))==i:
  4.             print(i,end=' ')
  5. flower()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 10:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表