鱼C论坛

 找回密码
 立即注册
查看: 2011|回复: 8

[已解决]python018讲习题求水仙花数求助

[复制链接]
发表于 2020-7-4 21:36:25 | 显示全部楼层 |阅读模式

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

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

x
题目要求:如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如153 = 1^3+5^3+3^3,因此153是一个水仙花数。编写一个程序,找出所有的水仙花数。

我的代码如下
x=100
>>> while 100<=x<=999:
        a=x/100
        b=x%10
        c=(x/10)%10
        if a*a*a+b*b*b+c*c*c==x:
                print(x)
                x +=1
        else:
                x +=1

               
>>>
>>> print(x)
1000

没有显示结果 当我print(x)显示为1000? 这是怎么回事呢 是我的代码哪里有问题吗
最佳答案
2020-7-4 22:11:31
小明同学xxm 发表于 2020-7-4 22:08
那为什么没有体现符合条件的水仙花数而只打印出1000呢



上面我的代码已经帮你改好了哈~你试着运行下就会发现效果~

因为循环过程中 x 的值一直在增大,只有你在循环过程中,x 循环到这个值了,此时打印才有效果,否则下一次循环 x + 1 了就不是原先的数值了,所以最后打印只能打印 1000

你如果想通过一次性打印,你可以 设置个列表来保存这个值如下代码:
x=100
temp = []
while x<=999:
    a=x//100
    b=x%10
    c=(x//10)%10
    if a**3+b**3+c**3==x:
        temp.append(x)
        x +=1
    else:
        x +=1
        
        
print(temp)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-4 21:37:10 | 显示全部楼层
i=100
while i<=999:
    t=i//100
    u=i//10%10
    p=i%10
    w=t*t*t+u*u*u+p*p*p
    if i==w:
        print(i,end=' ')
    i+=1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-4 21:38:03 | 显示全部楼层
本帖最后由 Twilight6 于 2020-7-4 21:44 编辑



因为你的 while 循环退出条件是 100<=x<=999 ,而你的while 循环内都是使得 x 增大的,所以你的大于一百的条件是多余的哈,因为你一开始时候就是100,而循环中只会增大

x<=999,就是直到 x = 1000 才会不满足循环条件而退出,所以最后退出时候即为 x = 1000 ,而此时你在打印 x ,肯定打印的结果为 1000了~

你的代码 a*a*a 之类的可以直接用 幂运算符来替代哈  即 a**3 == a*a*a
x=100
while x<=999:
    a=x//100
    b=x%10
    c=(x//10)%10
    if a**3+b**3+c**3==x:
            print(x)
            x +=1
    else:
            x +=1

还有一点哈,你的代码里面不能用 除法,应该用 // 地板除,因为如果你用除法,会导致可能除出小数

导致你三次方之和不会等于 原来~,所以改成地板除 // 就好


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

使用道具 举报

发表于 2020-7-4 21:38:11 | 显示全部楼层
水仙花类似问题很多很多很多了,尝试用搜索功能找到自己的答案喔
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-4 22:04:21 | 显示全部楼层
x=100
while x<=999:
    a=x//100
    b=x%10
    c=(x//10)%10
    if a**3+b**3+c**3==x:
            print(x)
            x +=1
    else:
            x +=1
这次帮你,下次请先搜索类似问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-4 22:08:18 | 显示全部楼层
本帖最后由 小明同学xxm 于 2020-7-4 22:11 编辑

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

使用道具 举报

发表于 2020-7-4 22:11:31 | 显示全部楼层    本楼为最佳答案   
小明同学xxm 发表于 2020-7-4 22:08
那为什么没有体现符合条件的水仙花数而只打印出1000呢



上面我的代码已经帮你改好了哈~你试着运行下就会发现效果~

因为循环过程中 x 的值一直在增大,只有你在循环过程中,x 循环到这个值了,此时打印才有效果,否则下一次循环 x + 1 了就不是原先的数值了,所以最后打印只能打印 1000

你如果想通过一次性打印,你可以 设置个列表来保存这个值如下代码:
x=100
temp = []
while x<=999:
    a=x//100
    b=x%10
    c=(x//10)%10
    if a**3+b**3+c**3==x:
        temp.append(x)
        x +=1
    else:
        x +=1
        
        
print(temp)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-4 22:12:44 | 显示全部楼层
乘号 发表于 2020-7-4 22:04
这次帮你,下次请先搜索类似问题

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

使用道具 举报

 楼主| 发表于 2020-7-4 22:15:12 | 显示全部楼层
青出于蓝 发表于 2020-7-4 21:38
水仙花类似问题很多很多很多了,尝试用搜索功能找到自己的答案喔

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 14:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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