XX牛牛 发表于 2020-11-25 10:39:12

新手,phthon课后题水仙花

根据题意自己打的代码
x=1
y=0
z=0
t=x*100+y*10+z
while t<1000:
    if t==x**3+y**3+z**3:
      print(t)
      t=t+1
完全没有反应,且和答案差距较大,不知道错哪里了,请帮忙看下
————————————————————
原题:
如果一个 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)
复制代码

昨非 发表于 2020-11-25 10:47:11

本帖最后由 昨非 于 2020-11-25 11:35 编辑

x=1
y=0
z=0
t=x*100+y*10+z #你这里t的初值就是100,进去后就是死循环,思路混乱,改都没法改
               #建议直接参考答案
while t<1000:
    if t==x**3+y**3+z**3: #xyz应该随t而改变,这个判断才有意义,但你没有说xyz的值怎么改变
      print(t)
      t=t+1

昨非 发表于 2020-11-25 10:47:48

这里有三种方法:你理解下先:
<font color="red">[已解决]</font>pyO基础入门课后题 水仙花数
https://fishc.com.cn/thread-185079-1-1.html
(出处: 鱼C论坛)

逃兵 发表于 2020-11-25 11:26:45

昨非 发表于 2020-11-25 10:47


初始值是100,这是个死循环

昨非 发表于 2020-11-25 11:32:06

逃兵 发表于 2020-11-25 11:26
初始值是100,这是个死循环

嗯,看错了,谢谢提醒了

逃兵 发表于 2020-11-25 11:42:39

t=100
while t<1000:
    x = t//100      #取t的百位
    y = t%100//10   #取t的十位
    z = t%10          #取t的个位
    if t==x**3+y**3+z**3:
      print(t)
    t=t+1

Twilight6 发表于 2020-11-25 13:10:11



因为 while 循环中没有改变过 x、y 、z 的值,而且 if 条件一开始就不成立,导致 t 的值也没有发生改变

导致陷入死循环,如果不想让其死循环,只需要把 t = t + 1 这行代码少一个缩进即可,这样就能避免死循环

但是,你的代码不能满足 题意,就如上说所,x、y、z 的值在循环中没有进行改变,导致的

在你代码的基础上进行修改,参考代码:

t = 100
while t<1000:
    x,y,z = str(t)
    if t == int(x)**3 + int(y)**3 + int(z)**3:
      print(t)
    t = t+1
页: [1]
查看完整版本: 新手,phthon课后题水仙花