Python 我写了一些查找阿姆斯特朗号码的代码,我不知道为什么它没有给我错误的输出?
一种等于其自身数字之和的数字,其中每一个数字都被提升到位数的幂次方。例如,153是阿姆斯特朗数 因为1^3+3^3+5^3=153 在这里,用户输入一个数字Python 我写了一些查找阿姆斯特朗号码的代码,我不知道为什么它没有给我错误的输出?,python,Python,一种等于其自身数字之和的数字,其中每一个数字都被提升到位数的幂次方。例如,153是阿姆斯特朗数 因为1^3+3^3+5^3=153 在这里,用户输入一个数字 number=int(input("please enter a number: ")) 在while循环中,它将给定数字的数字放入numbers类中 numbers=[] while number>0: rem=number%10 numbers.appe
number=int(input("please enter a number: "))
在while循环中,它将给定数字的数字放入numbers类中
numbers=[]
while number>0:
rem=number%10
numbers.append(rem)
number=int(number/10)
然后我们想把他们的曲谱放到曲谱课上
qubes=[]
for i in range(0,len(numbers)):
c=(int(numbers[i]))**len(numbers)
qubes.append(c)
现在我们计算qubes类成员的总和
result = sum(i for i in qubes)
我不知道为什么下面的if_代码不起作用,它只是给了我错误的输出我不知道为什么
即使我输入153,它也打印为false
if result==number:
print("true")
else:print("false")
总结评论中的所有建议: 你的主要问题是:
- 创建
列表时,使用number
这会更改number=int(number/10)
变量本身,直到它等于零。这意味着,正如您所经历的,数字
将始终是result==number
False
代码中的一些冗余部分:
numbers=[int(i)for i in str(number)]
。这实际上可以解决上述问题,因为您不会以这种方式更改编号
int
转换。在Python中使用直接循环比在索引上循环更具可读性:
qubes = []
for num in numbers:
qubes.append(num**len(numbers))
sum(在qubes中i代表i)
只是说sum(qubes)
的一种过于明确的方式
打印(result==number)
综合以上所有内容,只需一行代码即可实现:
print(number == sum(int(digit)**len(str(number)) for digit in str(number)))
这就是你错的地方。您应该迭代整数,而不是范围函数给定的迭代器 用这个
qubes=[]
以数字表示的i:
c=(整数(i)**len(数字))
qubes.append(c)
而不是
qubes=[]
对于范围(0,len(数字))中的i:
c=(整数(数字[i])**len(数字)
qubes.append(c)
另外,您正在将数字引用到其自身number=(int(number/10))
,因此您的结果值将是153,但最后的数字值将是0,因为您减少了数字的值。因此,将number的值复制到另一个变量(下面代码中的num1)
完整代码:
number=int(输入(“请输入一个数字:”)
num1=数字
数字=[]
当数字>0时:
rem=数字%10
数字。追加(rem)
数字=整数(数字/10)
qubes=[]
以数字表示的i:
c=(整数(i)**len(数字))
qubes.append(c)
结果=总和(以qubes表示的i对i)
打印(结果==int(num1))
result有什么值?您希望它有什么值?你调试过为什么值与你期望的值不同吗?那么,你的程序会给你一个false
输出,还是没有输出?(int(numbers[i])**len(numbers)
将数字提升到位数的幂次方,而不是3的幂次方。此外,这里不需要转换为int,因为它们已经是整数了。有用链接:顺便说一句:number=int(number/10)
意味着您将丢失原始的number
!顺便说一句,sum(我在qubes中代表我)
只是说sum(qubes)
我比OP更喜欢你的代码,然而,两者产生的结果都不如一些建议那么优雅。@Tomerikoo是的,谢谢你的评论,编辑了全文description@PrakashDahal谢谢你现在我的代码工作:)