UnboundLocalError: local variable 'usermoney' referenced before assignment
Всем привет. Решил по фану создать симулятор жизни, но столкнулся с такой проблемой - UnboundLocalError: local variable 'usermoney' referenced before assignment Вот код:
import random
print("Привет, ты находишься в симуляторе жизни.\nВведи своё имя ниже и нажми на Enter")
username = input()
print("Начнём игру, " + username + "!")
print("Ты обычный гражданин, и сидишь без работы из за карантина(( \nЧтобы заработать денег, ты должен собирать и сдавать мусор, пока тебя не увидят полицейскии. Если это произойдет, игра закончена!")
usermoney = 300
def accinfo():
print("\nТвоё имя - " + username + ".\nТвой счет - " + str(usermoney) + "$.")
accinfo()
print("\n\nЧтобы собрать мусор, напиши 1, чобы перейти в профиль, напиши 2, а чтобы перейти в магазин, напиши 3.")
usermackes = int(input())
winlose = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def trashcollect():
output = random.choice(winlose)
if output > 5:
print("Вас не спалили! Заберите ваши 500$!")
usermoney = usermoney + 500
print("Ваш баланс - " + str(usermoney) + "$!")
trashcollect()
Ответы (3 шт):
Не судите строго код, я позавчера Python начал изучать.
Я в принципе понял почему ошибка, но как тогда мне сделать так, чтобы по выполнению это функции в переменную usermoney добавлялось 500 ?
Решение тривиально. Вы объявляете переменную в основной части программы, а взаимодействует с ней в конструкции def, определяющей процедуру. В процедуре переменные локальные, как правило. Вот и не может питон получить доступ из локального в глобальное. Варианта два. Либо передавать переменную usermoney в саму функцию в качестве аргумента, либо использовать global usermoney перед строкой с добавлением 500$.
Имхо, код конечно полный треш. Советую четко отделить процедуры от остального кода. Возможно использовать классы, но не мешать все вместе.
def trashcollect():
output = random.choice(winlose)
if output > 5:
print("Вас не спалили! Заберите ваши 500$!")
global usermoney
usermoney = usermoney + 500
print("Ваш баланс - " + str(usermoney) + "$!")
Это все что нужно исправить для работы программы.