#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