鱼C论坛

 找回密码
 立即注册
查看: 1689|回复: 6

[已解决]新手,phthon课后题水仙花

[复制链接]
发表于 2020-11-25 10:39:12 | 显示全部楼层 |阅读模式

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

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

x
根据题意自己打的代码
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:48
这里有三种方法:你理解下先:
<font color="red">[已解决]</font>pyO基础入门课后题 水仙花数
https://fishc.com.cn/thread-185079-1-1.html
(出处: 鱼C论坛)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 10:47:48 | 显示全部楼层    本楼为最佳答案   
这里有三种方法:你理解下先:
<font color="red">[已解决]</font>pyO基础入门课后题 水仙花数
https://fishc.com.cn/thread-185079-1-1.html
(出处: 鱼C论坛)

评分

参与人数 1鱼币 +3 收起 理由
XX牛牛 + 3 感谢老大抽时间回复!很有用,思路开阔不少

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 11:26:45 | 显示全部楼层

初始值是100,这是个死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-25 11:32:06 | 显示全部楼层
逃兵 发表于 2020-11-25 11:26
初始值是100,这是个死循环

嗯,看错了,谢谢提醒了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

评分

参与人数 1鱼币 +3 收起 理由
XX牛牛 + 3 看的懂说的明白,感谢!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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鱼币 +3 收起 理由
XX牛牛 + 3 太感谢了,疑惑终于解开了,不过最佳答案给.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 13:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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