Неожиданный вывод при проверке нарциссического числа в Python

#python #python-3.x

#python #python-3.x

Вопрос:

Итак, я написал этот код для печати нарциссических чисел меньше 10000 в python

 for num in range(0,10000):
    armSum = 0
    for strNum in str(num):
        if len(str(num)) <= 3:
            for strNum in str(num):
                armSum  = int(strNum)**3
            if armSum == num:
                print("Three digit Narcissistic number:",num)

        elif len(str(num)) == 4:
            for strNum in str(num):
                armSum  = int(strNum)**4
            if armSum == num:
                print("Four digit Narcissistic number:",num) 
 

Но на выходе этого кода выводится дополнительное число 702, которое не является нарциссическим числом.

Вывод:

 Three digit Narcissistic number: 0
Three digit Narcissistic number: 1
Three digit Narcissistic number: 153
Three digit Narcissistic number: 370
Three digit Narcissistic number: 371
Three digit Narcissistic number: 407
Three digit Narcissistic number: 702
Four digit Narcissistic number: 1634
Four digit Narcissistic number: 8208
Four digit Narcissistic number: 9474
 

Где я ошибся в коде?

Ответ №1:

Причина, по которой вы получаете неправильный ответ, заключается в том, что вы дважды вычисляете сумму, дважды используя цикл for strNum in str(num): .

 >>> 2*(7**3   2**3 )
702
>>> 
 

Кроме того, есть ли какая-то конкретная причина, по которой вам нужны два условия if? Пожалуйста, смотрите ниже. И предоставление хороших имен переменных также помогает в отладке.

 for num in range(0,10000):
    armSum = 0
    orig_num = num
    num = str(num)
    index = len(num)
    for digit in num:
        armSum  = int(digit)**index
    if armSum == orig_num:
        print(f"{index} Digit Narcissistic number:",num)


user@Inspiron:~$ python nar.py 
1 Digit Narcissistic number: 0
1 Digit Narcissistic number: 1
1 Digit Narcissistic number: 2
1 Digit Narcissistic number: 3
1 Digit Narcissistic number: 4
1 Digit Narcissistic number: 5
1 Digit Narcissistic number: 6
1 Digit Narcissistic number: 7
1 Digit Narcissistic number: 8
1 Digit Narcissistic number: 9
3 Digit Narcissistic number: 153
3 Digit Narcissistic number: 370
3 Digit Narcissistic number: 371
3 Digit Narcissistic number: 407
4 Digit Narcissistic number: 1634
4 Digit Narcissistic number: 8208
4 Digit Narcissistic number: 9474