新手,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 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
这里有三种方法:你理解下先:
<font color="red">[已解决]</font>pyO基础入门课后题 水仙花数
https://fishc.com.cn/thread-185079-1-1.html
(出处: 鱼C论坛)
昨非 发表于 2020-11-25 10:47
初始值是100,这是个死循环 逃兵 发表于 2020-11-25 11:26
初始值是100,这是个死循环
嗯,看错了,谢谢提醒了 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
因为 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]