Функция не возвращает 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 шт):
Чтобы изменить глобальную переменную внутри функции, к ней надо обратиться при помощи ключевого слова 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)