#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: явное лучше, чем неявное (магические глобальные переменные не очень явные, и в дальнейшем код может быть трудно читать)