一种等于其自身数字之和的数字,其中每一个数字都被提升到位数的幂次方。例如,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.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")
总结评论中的所有建议:
你的主要问题是:
numbers
列表时,使用number = int(number/10)
这会更改number
变量本身,直到它等于零。这意味着,正如您所经历的,result == number
将始终是False
李>代码中的一些冗余部分:
请参见Splitting integer in Python?以获取数字的数字列表。大多数情况下,您只需执行
numbers = [int(i) for i in str(number)]
。这实际上可以解决上面的问题,因为您不会以这种方式更改number
数字已经是整数,因此不需要
int
转换。在Python中使用直接循环比在索引上循环更具可读性:sum(i for i in qubes)
只是说sum(qubes)
的一种过于明确的方式根据布尔结果打印“真”或“假”。不需要条件,只需
print(result == number)
综合以上所有内容,只需一行代码即可实现:
这就是你错的地方。您应该迭代整数,而不是范围函数给定的迭代器
用这个
而不是
此外,您正在将数字引用到自身
number=(int(number/10))
,因此结果值将是153,但数字值在最后将是0,因为您已减少了数字的值。因此,将number的值复制到另一个变量(下面代码中的num1)完整代码:
相关问题 更多 >
编程相关推荐