我写了一些查找阿姆斯特朗号码的代码,我不知道为什么它没有给我错误的输出?

2024-10-01 00:19:30 发布

您现在位置: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.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")

Tags: infalsenumberforlenif数字result
2条回答

总结评论中的所有建议:

你的主要问题是:

  • 创建numbers列表时,使用number = int(number/10)这会更改number变量本身,直到它等于零。这意味着,正如您所经历的,result == number将始终是False

代码中的一些冗余部分:

  1. 请参见Splitting integer in Python?以获取数字的数字列表。大多数情况下,您只需执行numbers = [int(i) for i in str(number)]。这实际上可以解决上面的问题,因为您不会以这种方式更改number

  2. 数字已经是整数,因此不需要int转换。在Python中使用直接循环比在索引上循环更具可读性:

    qubes = []
    for num in numbers:
        qubes.append(num**len(numbers))
    
  3. sum(i for i in qubes)只是说sum(qubes)的一种过于明确的方式

  4. 根据布尔结果打印“真”或“假”。不需要条件,只需print(result == number)


综合以上所有内容,只需一行代码即可实现:

print(number == sum(int(digit)**len(str(number)) for digit in str(number)))

这就是你错的地方。您应该迭代整数,而不是范围函数给定的迭代器

用这个

qubes=[]
for i in numbers:
  c=(int(i)**len(numbers))
  qubes.append(c)

而不是

qubes=[]
for i in range(0,len(numbers)):
  c=(int(numbers[i]))**len(numbers)
  qubes.append(c)

此外,您正在将数字引用到自身number=(int(number/10)),因此结果值将是153,但数字值在最后将是0,因为您已减少了数字的值。因此,将number的值复制到另一个变量(下面代码中的num1)

完整代码:

number=int(input("please enter a number: "))
num1 = number
numbers=[]
while number>0:
    rem=number%10
    numbers.append(rem)
    number=int(number/10)
    
qubes=[]
for i in numbers:
  c=(int(i)**len(numbers))
  qubes.append(c)
result = sum(i for i in qubes)
print(result == int(num1))

相关问题 更多 >