Ошибка "'NoneType' object is not iterable" при работе программы
программа находит максимальное доступное избыточное число в диапазоне делителей от h до 2, выводит делимое и (sum-делимое). почему появляется ошибка?
!!dividers_sum = sum(number_dividers) TypeError: 'NoneType' object is not iterable
from math import (
sqrt,
ceil
)
def dividers(number):
dividers_list = set()
dividers_list.add(1)
for divider in range(2, ceil(sqrt(number))):
if number % divider == 0:
dividers_list.add(divider)
dividers_list.add(number//divider)
return (list(dividers_list))
def abundant(h: int):
for number in range(h, 1, -1):
number_dividers = dividers(number)
dividers_sum = sum(number_dividers)
if dividers_sum > number:
return [[number], [dividers_sum - number]]
h = int(input())
print(abundant(h))
Ответы (1 шт):
Автор решения: MarianD
→ Ссылка
Вам очень нравятся списки, не правда ли? (Мне тоже...) И вообще скобки. :-)
Но вы усложняете себе жизнь, стараясь переводить все в списки и скобки не экономить...
Потому я упростил ваш код в двух местах - в одном из них была ваша единственная ошибка — не подходящий отступ.
Из-за него ваша команда return ... не выполнилась. Потому функция dividers() по умолчанию возвращала значение None (типа NoneType).
from math import (
sqrt,
ceil
)
def dividers(number):
dividers_list = set()
dividers_list.add(1)
for divider in range(2, ceil(sqrt(number))):
if number % divider == 0:
dividers_list.add(divider)
dividers_list.add(number//divider)
return dividers_list # здесь была ошибка в отступе;
# не нужно конвертировать в список :-)
def abundant(h: int):
for number in range(h, 1, -1):
number_dividers = dividers(number)
dividers_sum = sum(number_dividers)
if dividers_sum > number:
return number, dividers_sum - number # не нужно никаких скобок :-)
h = int(input())
print(abundant(h))
Пример выводов:
- для числа 99:
(96, 60) - для числа 32:
(30, 12) - для числа 16:
(12, 4) - для числа 12:
(12, 4) - для числа 10:
None