Функция, ошибка UnboundLocalError
Ошибка:
File "source_file.py", line 237, in food
confirm_amount("Хлеб", 5)
UnboundLocalError: local variable 'confirm_amount' referenced before assignment
money = 100
choose = ""
sausage_amount = 1
sausage = ""
def location(location = "Дом"):
print("Локация:", location)
def hp():
if HP % 1 == 0:
print("Здоровье:", int(HP))
elif HP % 1 != 0:
print("Здоровье:", HP)
def balance():
if money % 1 == 0:
print("Баланс:", int(money))
elif money % 1 != 0:
print("Баланс:", money)
def buy():
location("Магазин")
hp()
balance()
print()
print("Покупка:\n")
print("1: Еда")
print("2: Инструменты")
print("3: Оружие")
print("4: Медикаменты")
print()
print("0: Назад\n")
choose = ""
choose = input(":")
print()
if choose == "1":
def food():
location("Магазин")
hp()
balance()
print()
print("Еда:\n")
print("1: Колбаса (10 монет, 4 HP")
print("2: Хлеб (5 монет, 2 HP)")
print()
print("0: Назад")
choose = ""
choose = input(":")
print()
if choose == "1":
def confirm_amount(food, amount):
global money
print("Вы подтверждаете покупку? (ДА или НЕТ)")
print()
global sausage
global sausage_amount
sausage = str(sausage_amount) + " " + food
print(sausage)
global inventory
verify = sausage in inventory
choose = ""
choose = input(":")
print()
if choose == "ДА":
if money >= amount:
if verify == False:
money -= amount
inventory.append(sausage)
print("Ваш инвентарь:")
print()
print(inventory)
print()
buy()
elif verify == True:
money -= amount
sausage_amount += 1
index = inventory.index(sausage)
sausage = str(sausage_amount) + " " + food
inventory[index] = sausage
print("Ваш инвентарь:")
print(inventory)
print()
time.sleep(1)
buy()
elif money < amount:
print("Недостаточно средств")
time.sleep(1)
buy()
elif choose == "НЕТ":
buy()
else:
confirm()
confirm_amount("Колбаса", 10)
elif choose == "2":
confirm_amount("Хлеб", 5)
Ответы (1 шт):
Автор решения: 4500zenja
→ Ссылка
Ваше объявление функции confirm_amount() действительно только для ветви, при которой choose = "1" — для всех остальных ветвей и остального кода данная функция будет всё ещё невидима из-за особенностей области видимости функций и переменных. Более подробно об этом Вы можете прочесть, например, тут.
Для начала попробуйте вынести все объявления функции в общую область видимости, т.е. не внутри каких-либо структур. ну и ещё хотелось бы, чтобы код был намного читабельнее, имхо