python018讲习题求水仙花数求助
题目要求:如果一个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? 这是怎么回事呢 是我的代码哪里有问题吗 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 本帖最后由 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
还有一点哈,你的代码里面不能用 除法,应该用 // 地板除,因为如果你用除法,会导致可能除出小数
导致你三次方之和不会等于 原来~,所以改成地板除 // 就好
水仙花类似问题很多很多很多了,尝试用搜索功能找到自己的答案喔{:10_254:} 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
这次帮你,下次请先搜索类似问题 本帖最后由 小明同学xxm 于 2020-7-4 22:11 编辑
好的 谢谢 小明同学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)
乘号 发表于 2020-7-4 22:04
这次帮你,下次请先搜索类似问题
好 谢谢 青出于蓝 发表于 2020-7-4 21:38
水仙花类似问题很多很多很多了,尝试用搜索功能找到自己的答案喔
嗯嗯 下次会的
页:
[1]