Функция не возвращает bool переменную

Испытываю определенные сложности в понимании того как работают функции. Не могу разобраться с тем как сделать, что бы функция возвращала переменную.

В данный момент продолжаю писать, скрипт для подсчёта различной статистики по шагам пройденным за день. Пересмотрел кучу разных статей и видео на ютубе о том, как именно работают функции, и как добиться от нее того, что нужно. Но, не получается разобраться.

Данный код нужен для того, что бы при условии, того, что прошел в день более 10.000 шагов записывать переменную, которая будет показывать True. И будущем буду таким образом выдавать ачивки при определенных условиях.

Пробовал различные варианты написания функции с использованием a, и без него, передавать или не передавать значения в функцию.

Всегда результат один и тот же. В функции через print() показывает значение True, а вне функции False. Вот нужно, что бы изменялась глобальная переменная achievement_more_10k_in_one_day_is на значение True, если условие выполнено.

STEPS = [11250, 10129, 13325, 10903, 4283, 13402, ]
achievement_more_10k_in_one_day_is = False

def achievements_func(a=achievement_more_10k_in_one_day_is):
    # Функция для вычисления полученных ачивок.
    steps_days_copy = STEPS.copy()      # Копия переменной с шагами
    for i in steps_days_copy:
        if i >= 10000:
            a = True
            if a == True:
                break
    return a

achievements_func()

Ответы (1 шт):

Автор решения: CameL

Чтобы изменить глобальную переменную внутри функции, к ней надо обратиться при помощи ключевого слова global. И структуру кода тоже поменять тут неплохо, как минимум копирование списка - это лишние затраты по памяти.

def achievements_func(step):
    global achievement_more_10k_in_one_day_is
    if step > 10000:
        achievement_more_10k_in_one_day_is = True
    else:
        achievement_more_10k_in_one_day_is = False

STEPS = [11250, 10129, 13325, 10903, 4283, 13402]
achievement_more_10k_in_one_day_is = False

for step in STEPS:
   achievements_func(step)
   print(achievement_more_10k_in_one_day_is)
→ Ссылка