Кратные 3 или 5. Можно ли это сделать с помощью операторов else if?

Я попробовал следующий код, и он работает нормально, за исключением 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

Если диапазон не содержит чисел, кратных 3 или 5, вы никогда не назначаете add_list. Вынесите это назначение из цикла, вам не нужно вычислять сумму до самого конца.

Barmar 16.08.2024 20:56

Кроме того, уверены ли вы, что предполагаемое решение состоит в том, чтобы иногда возвращать список, а иногда — число? Это несколько необычная структура.

Andrew Yim 16.08.2024 20:57
range(number) никогда не будет содержать число меньше 0, поэтому первый if никогда не будет успешным.
Barmar 16.08.2024 20:57

Почему вы иногда возвращаете список ([0]), а в противном случае возвращаете целое число?

MatBailie 16.08.2024 21:19

«Можно ли это сделать» — Что можно сделать? Вы забыли сказать нам, что должен делать код.

no comment 16.08.2024 21:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
5
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Если диапазон не содержит чисел, кратных 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.

Другие вопросы по теме