TypeError: объект 'NoneType' не повторяется: кратно 3 и 5 - PullRequest
0 голосов
/ 16 июня 2020

Я новичок в python, извините, если есть действительно очевидный ответ на этот вопрос. Вот мой код:

def mult_of_3_or_5():
    for x in range(21):
        if x % 5 == 0:
            (x)
            continue
        elif x % 3 == 0:
            (x)


print(sum(mult_of_3_or_5())) 

Когда я запускаю его, появляется ошибка «TypeError: объект 'NoneType' не повторяется». Я рассмотрел другие вопросы о переполнении стека с аналогичной проблемой, но до сих пор не понимаю, что я могу сделать. Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 16 июня 2020
print(sum(mult_of_3_or_5()))

sum() ожидает получить последовательность элементов (обычно список) в качестве аргумента.

Но функция mult_of_3_or_5() ничего не возвращает, поэтому по умолчанию возвращает None . sum() пытается перебрать значение None, и это ваша ошибка.

Похоже, вы намеревались mult_of_3_or_5() вернуть список значений от 0 до 20, которые кратны 3 или 5. Но этого не происходит.

0 голосов
/ 16 июня 2020

Я думаю, вы имели в виду:

def mult_of_3_or_5():
    for x in range(21):
        if x % 5 == 0:
            yield x
        if x % 3 == 0: # I suspect you meant to count twice if both 3 and 5 are divisors, if not make it elif instead
            yield x


print(sum(mult_of_3_or_5())) 

Что по сути суммирует все числа, кратные 3 и 5, считая число дважды, в случае, если оно кратно обоим (например, 15).

Возвращает 113

Вам следует ознакомиться с концепцией генератора в python - это то, что я ввел здесь с помощью ключевого слова yield. В отличие от return, он не завершает функцию после вызова - что, по сути, именно я понимаю вы хотите достичь.

Чтобы прочитать о генераторе :

https://wiki.python.org/moin/Generators

0 голосов
/ 16 июня 2020

Ваша функция mult_of_3_or_5 ничего не возвращает. Python вернет NoneType по умолчанию, даже если он не указан явно.

Вы пытаетесь суммировать результат с помощью sum (mult_of_3_or_5 ()), который будет пытаться суммировать (NoneType). Это невозможно, потому что NoneType не повторяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...