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 шт):

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

Не судите строго код, я позавчера Python начал изучать.

Я в принципе понял почему ошибка, но как тогда мне сделать так, чтобы по выполнению это функции в переменную usermoney добавлялось 500 ?

→ Ссылка
Автор решения: Роман

Решение тривиально. Вы объявляете переменную в основной части программы, а взаимодействует с ней в конструкции def, определяющей процедуру. В процедуре переменные локальные, как правило. Вот и не может питон получить доступ из локального в глобальное. Варианта два. Либо передавать переменную usermoney в саму функцию в качестве аргумента, либо использовать global usermoney перед строкой с добавлением 500$.

Имхо, код конечно полный треш. Советую четко отделить процедуры от остального кода. Возможно использовать классы, но не мешать все вместе.

→ Ссылка
Автор решения: Roman
def trashcollect():
output = random.choice(winlose)
if output > 5:
    print("Вас не спалили! Заберите ваши 500$!")
    global usermoney
    usermoney = usermoney + 500
    print("Ваш баланс - " + str(usermoney) + "$!")

Это все что нужно исправить для работы программы.

→ Ссылка