Ошибка "'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
→ Ссылка