Переменные сбрасываются при вызове метода

Я создаю текстовую игру, которая требует от вас поиска двух мест, чтобы двигаться вперед в игре, но у нее также есть два фиктивных варианта, чтобы сбить вас с пути. Это не важно. Проблема в том, что как только метод вызывается снова после заголовка одной из опций 'if', и одна из переменных устанавливается в true, он устанавливает его обратно в false в самом верху.

def marketplace():
    searchArmorer=False
    searchBlacksmith=False
    while (searchArmorer==False and searchBlacksmith==False):
        print("Search the:")
        search=input("\n A. The blacksmith \n B. Crocodile Shop \n C. Armorer \n D. Exotic Cheese shop \n")
            if search=="A":
            searchBlacksmith=True
            print("You find some dusty looking copper swords in the corner that the blacksmith says you can borrow. If you haven't got it already, now all you need is some armor. \n")
            marketplace()
        elif search=="B":
            croc=input("You open the door to have a crocodile leap out at you! Will you attempt to fight it, or run away? \n A. Fight \n B. Flee \n")
            #croc fight
            if croc=="A":
                print("You have died. Crocodiles are dangerous.")
                break
            elif croc=="B":
                print("You escape back to the village square. \n")
                marketplace()
            #end of croc fight
        elif search=="C":
            searchArmorer=True
            print("You ask if the armorer has any cheap armor, but he says the cheapest he has is leather. It's not your first choice, but beggars can't be choosers. \n")
            marketplace()
        elif search=="D":
            print("You see nothing that could help you on your quest. \n")
        marketplace()

1 ответ

Цикл "while" будет выполняться снова и снова до тех пор, пока условие не станет ложным, поэтому вам не нужно снова вызывать функцию из цикла.

Удалить или закомментировать все звонки на marketplace()и будет работать нормально.

Также вам не нужно использовать continue либо, если вы используете if - elif, потому что он выполнит только одно из предложений.

Другие вопросы по тегам