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

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

一种等于其自身数字之和的数字,其中每一个数字都被提升到位数的幂次方。例如,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")

总结评论中的所有建议:

你的主要问题是:

  • 创建
    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谢谢你现在我的代码工作:)