Похоже, что вашей реальной целью здесь является отслеживание инвентаря и обеспечение его состояния доступным из нескольких функций.В этом контексте ваш подход будет работать, но он плохо масштабируется до произвольного количества предметов инвентаря.
inventory_rope = False
def pick_up(item):
if item == "rope":
inventory_rope = True
def use(item):
if (item == "rope") and inventory_rope:
print("Used rope")
Примечание. Поскольку похоже, что вы делаете это очень просто, я используюСтроки для предметов здесь.Конечно, есть лучшие способы сделать это.
Есть много потенциальных способов обработки запасов;Можно было бы просто создать список для обработки того, что получает игрок.
inventory = []
def pick_up(item):
print("You picked up", item)
inventory.append(item)
def use(item):
print("Used", item)
inventory.remove(item)
Вместо этого вы могли бы наследовать от встроенного типа list
, если хотите встроить дополнительные / другие варианты поведения.
class Inventory(list):
def append(self, item):
print("You picked up", item)
super().append(item)
inventory = Inventory()
inventory.append("rope")
Другой возможностью было бы сделать инвентарь атрибутом объекта вашего игрока, если есть другие вещи, которые игрок может сделать, которые имеет смысл встроить в класс.
class Player(object):
_inventory = None
def __init__(self):
# Note: Don't use mutable objects as default arguments
self._inventory = []
def pick_up(self, item):
print("You picked up", item)
self._inventory.append(item)
player = Player()
player.pick_up("rope")