Я попробовал следующий код, и он работает нормально, за исключением 0 или отрицательных чисел, он говорит: «невозможно получить доступ к локальной переменной add_list, если она не связана со значением».
Я видел, как это можно сделать другими способами. Мне просто интересно, можно ли это сделать с помощью оператора elif. Я пробовал «разрыв», отступ и разные порядки, но получаю ту же ошибку.
def solution(number):
raw_list = range(number)
my_list = []
for num in raw_list:
if num < 0:
my_list.append(0)
return my_list
elif num % 3 == 0 or num % 5 == 0:
my_list.append(num)
add_list = sum(my_list)
return add_list
Кроме того, уверены ли вы, что предполагаемое решение состоит в том, чтобы иногда возвращать список, а иногда — число? Это несколько необычная структура.
range(number)
никогда не будет содержать число меньше 0, поэтому первый if
никогда не будет успешным.
Почему вы иногда возвращаете список ([0]
), а в противном случае возвращаете целое число?
«Можно ли это сделать» — Что можно сделать? Вы забыли сказать нам, что должен делать код.
Если диапазон не содержит чисел, кратных 3 или 5, вы никогда не выполните add_list = sum(my_list)
. В результате вы получаете ошибку при попытке вернуть его.
Нет необходимости вычислять сумму каждый раз в цикле, поскольку вы перезаписываете сумму предыдущей итерации. Уберите это из цикла, тогда оно не будет зависеть от условия elif
.
def solution(number):
raw_list = range(number)
my_list = []
for num in raw_list:
if num < 0:
my_list.append(0)
return my_list
elif num % 3 == 0 or num % 5 == 0:
my_list.append(num)
add_list = sum(my_list)
return add_list
Поскольку условие if
никогда не может быть истинным, вы также можете его пропустить. Тогда вы можете упростить все это до:
def solution(number):
return sum(num in range(number) if num % 3 == 0 or num % 5 == 0)
Кстати, raw_list
— неудачное имя для переменной. range()
не возвращает список, он возвращает объект range
, который действует как генератор.
функция диапазона не принимает 0, потому что обычно диапазон начинается с 0 до тех пор, пока не будет задано заданное число. Поэтому отрицательные числа не работают. Для исправления ошибки «невозможно получить доступ к локальной переменной 'add_list', где она не связана со значением», вы просто необходимо хранить переменную add_list вне цикла for, поэтому операция происходит после добавления значений в my_list.
Если диапазон не содержит чисел, кратных 3 или 5, вы никогда не назначаете
add_list
. Вынесите это назначение из цикла, вам не нужно вычислять сумму до самого конца.