Не понимаю, почему моя функция не может быть вызвана

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытаюсь создать небольшую текстовую rpg с помощью python. И первое, что я хочу сделать, это ввести данные для экипировки брони или оружия.

 def find_armor(x):
    if x=="bad armor":
        armor=bad_armor
    if x=="good armor":
        armor=good_armor

##item
armor=[0,0]
bad_armor=["bad armor",300]
good_armor=["good armor", 500]

##choose
option1,option2=input(">").split(" ",1)
if option1=="equip":
    find_armor(option2)

##ui
armor_name=armor[0]
armor_point=armor[1]
print("your armor:",armor_name,armor_point)
  

Итак, вот в чем проблема:

моя функция find_armor не вызывает все, что я ввожу.

Если мое первое слово «equip«, вывод всегда: your armor: 0 0

Комментарии:

1. Если вы создаете игру на python, которая заключается в сохранении состояния любой формы (например: персонаж держит броню), я настоятельно рекомендую использовать классы python для этой задачи. Это, вероятно, избавит вас от большой головной боли и поможет вам в дальнейшем написании кода. 🙂

Ответ №1:

В функции переменные изменяются в локальной области видимости. Затем используйте global armor before . И исправление неправильного отступа:

 def find_armor(x):
  global armor
  if x=="bad armor":
    global bad_armor
    armor=bad_armor
  elif x=="good armor":
    global good_armor
    armor=good_armor
  

Комментарии:

1. глобальные переменные могут быть удобны для некоторых задач, но в этой я бы предпочел передать экземпляр какого-то Character класса или даже словаря. Как говорит Zen of Python: явное лучше, чем неявное (магические глобальные переменные не очень явные, и в дальнейшем код может быть трудно читать)