Unbound local Error
В общем, перед запуском программы в коде я создаю три переменных (urmoney, playcount и wincount и их двойники с цифрой на конце). В коде объявил их как глобальные. После их объявления, я вызываю функцию (которую объявил заранее до переменных). Вот часть кода:
if casinorandom == ">":
print(Fore.GREEN + "Окей, ты думаешь что выпадет больше.")
random1 = random.randint(1, 20)
if int(random1) < 10:
print(Fore.RED + 'Лол, ты всрал свои money')
urmoney = urmoney1 - playvalue1
playcount = playcount2 + 1
playcount2 = playcount
urmoney1 = urmoney
lobby()
else:
print(Fore.GREEN + Back.YELLOW + 'Гц, ты выйграл!!')
urmoney = urmoney1 + (playvalue1 * 2)
playcount = playcount2 + 1
playcount2 = playcount
wincount = wincount2 + 1
wincount2 = wincount
urmoney1 = urmoney
lobby()
Как только функция доходит до изменения переменных, программа выдаёт ошибку:
UnboundLocalError: local variable 'urmoney1' referenced before assigment.
По поводу переменных с числом на конце, это моя попытка сделать костыль. Он однажды сработал, однако в функции info(), которая должна печатать в консоль текст о заслугах игрока (сколько раз выйграл, сыграл, сколько у него денег), всё осталось так-же как и было (при запуске программы, переменная urmoney = 50, а urmoney1 = urmoney). Причём в другой функции, в которой так-же используется переменная urmoney, не выдаёт никаких ошибок (задача этой функции - запросить значение playvalue1, а далее - сравнить, если переменная больше чем urmoney или равна 0, то она возвращала юзера обратно в начало функции.) Если сделать вот так -
print(Fore.GREEN + "Окей, ты думаешь что выпадет больше.")
random1 = random.randint(1, 20)
if int(random1) < 10:
print(Fore.RED + 'Лол, ты всрал свои money')
urmoney = int(urmoney) - playvalue1
playcount = int(playcount) + 1
lobby()
else:
print(Fore.GREEN + Back.YELLOW + 'Гц, ты выйграл!!')
urmoney = int(urmoney) + (playvalue1 * 2)
playcount = int(playcount) + 1
wincount = int(wincount) + 1
lobby()
Выдаст ошибку:
UnboundLocalError: local variable 'urmoney' referenced before assigment.
Ответы (2 шт):
Вероятно приведен неполный фрагмент кода.
Но судя по текущему коду есть 2 проблемы в первом блоке:
urmoney = urmoney1 - playvalue1
и
urmoney = urmoney1 + (playvalue1 * 2)
urmoney1 - используется до присваивания значения.
Аналогичные проблемы присутствуют во втором блоке кода для переменной urmoney.
Необходимо определить значения указанных переменных до блока проверки условий if.
Нашёл решение, вместо urmoney = urmoney + x надо было написать urmoney += x