Как мне вызвать условное выражение в зависимости от того, была ли выполнена функция? - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь найти способ изменить глобальную переменную с False на True, если вызывается функция rope.С моим существующим кодом, что я мог бы добавить, чтобы сделать это возможным?

Кроме того, существующая глобальная переменная называется inventoryRope, и она начинается с False.

Вотмой код:

def rope():

    print("You pick up the rope.")

    command = input("Type CONTINUE to carry on.")
    if command == "CONTINUE":
        nextScene()

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

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

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")
0 голосов
/ 15 октября 2018

Нужно использовать global:

inventoryRope = False

def rope():
    global inventoryRope

    print("You pick up the rope.")

    command = input("Type CONTINUE to carry on.")
    if command == "CONTINUE":
        inventoryRope = True
        nextScene()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...