Текстовая ролевая игра, позволяющая перемещаться между комнатами, игнорирует все операторы if, проверяющие местоположение

Эта проблема меня всегда беспокоила. Я переделывал эту программу несколько раз на протяжении многих лет, но результаты были одинаковыми; программа игнорирует все операторы if. Как будто он знает программу, которую я пытаюсь создать, и отказывается выполняться.

С помощью команд печати местоположение устанавливается точно. Нет причин, по которым он должен игнорировать это. Вот моя последняя попытка создать эту программу:

topLeft='topLeft'
top='top'
topRight='topRight'
midLeft='midLeft'
mid='mid'
midRight='midRight'
botLeft='botLeft'
bot='bot'
botRight='botRight'

location=mid

def printError():
    print("You can't go that way!")

def topLeft():
    userInput=input('You can go south or east.')
    if userInput=='s':
        location=midLeft
    elif userInput=='e':
        location=top
    else:
        printError()
        

def top():
    userInput=input('You can go south, east, or west.')
    if userInput=='s':
        location=mid
    elif userInput=='e':
        location=topRight
    elif userInput=='w':
        location=topLeft
    else:
        printError()

def topRight():
    userInput=input('You can go south or west.')
    if userInput=='s':
        location=midRight
    elif userInput=='w':
        location=top
    else:
        printError()

def midLeft():
    userInput=input('You can go north, south or east.')
    if userInput=='n':
        location=topLeft
    elif userInput=='s':
        location=botLeft
    elif userInput=='e':
        location=mid
    else:
        printError()

def mid():
    userInput=input('You can go north, south, east, and west.')
    if userInput=='n':
        location=top
    elif userInput=='s':
        location=bot
    elif userInput=='e':
        location=midRight
    elif userInput=='w':
        location=midLeft
    else:
        printError()

def midRight():
    userInput=input('You can go north, south, west.')
    if userInput=='n':
        location=topRight
    elif userInput=='s':
        location=botRight
    elif userInput=='w':
        location=mid
    else:
        printError()

def botLeft():
    userInput=input('You can go north or east.')
    if userInput=='n':
        location=midLeft
    elif userInput=='e':
        location=bot
    else:
        printError()

def bot():
    userInput=input('You can go north, east, or west.')
    if userInput=='n':
        location=mid
    elif userInput=='e':
        location=botLeft
    elif userInput=='w':
        location=botRight
    else:
        printError()

def botRight():
    userInput=input('You can go north or west.')
    if userInput=='n':
        location=midRight
    elif userInput=='w':
        location=bot
    else:
        printError()

while True:
    print(location)
    if location==topLeft:
        topLeft()
    elif location==top:
        top()
    elif location==topRight:
        topRight()
    elif location==midLeft:
        midLeft()
    elif location==mid:
        mid()
    elif location==midRight:
        midRight()
    elif location==botLeft:
        botLeft()
    elif location==bot:
        bot()
    elif location==botRight:
        botRight()

Надеюсь, код не требует пояснений. Почему такие программы продолжают отказываться работать? Никакие другие подобные циклы не игнорируют операторы if. Он делает это и при других обстоятельствах, но это единственный случай, имеющий закономерность. Я пытаюсь создать текстовую ролевую игру, но она сразу же терпит неудачу, что бы я ни делал. Почему он это делает? Неужели циклы while просто не любят большое количество операторов if? Он даже делает это, даже если вариантов всего два. Я запускаю какой-то отказоустойчивый механизм? Что здесь происходит?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Вам придется переименовать либо функции, либо строки. Лично я бы выбрал функции, поскольку вы можете найти и заменить «top()», не заморачиваясь слишком сильно, но это зависит от вас.

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

    topLeft='topLeft'
    top='top'
    topRight='topRight'
    midLeft='midLeft'
    mid='mid'
    midRight='midRight'
    botLeft='botLeft'
    bot='bot'
    botRight='botRight'
    location=mid
    
    def printError():
        print("You can't go that way!")
    
    def topLeft():
        print('topLeft')
        name = input('You can go south or east.')
        if name=='s':
            midLeft()
        elif name=='e':
            top()
        else:
            printError()
            
    
    def top():
        print('top')
        name = input('You can go south, east, or west.')
        if name=='s':
            mid()
        elif name=='e':
            topRight()
        elif name=='w':
            topLeft()
        else:
            printError()
    
    def topRight():
        print('topRight')
        name=input('You can go south or west.')
        if name=='s':
            midRight()
        elif name=='w':
            top()
        else:
            printError()
    
    def midLeft():
        print('midLeft')
        name=input('You can go north, south or east.')
        if name=='n':
            topLeft()
        elif name=='s':
            botLeft()
        elif name=='e':
            mid()
        else:
            printError()
    
    def mid():
        print('mid')
        name=input('You can go north, south, east, and west.')
        if name=='n':
            top()
        elif name=='s':
            bot()
        elif name=='e':
            midRight()
        elif name=='w':
            midLeft()
        else:
            printError()
    
    def midRight():
        print('midRight')
        name=input('You can go north, south, west.')
        if name=='n':
            topRight()
        elif name=='s':
            botRight()
        elif name=='w':
            mid()
        else:
            printError()
    
    def botLeft():
        print('botLeft')
        name=input('You can go north or east.')
        if name=='n':
            midLeft()
        elif name=='e':
            bot()
        else:
            printError()
    
    def bot():
        print('bot')
        name=input('You can go north, east, or west.')
        if name=='n':
            mid()
        elif name=='e':
            botLeft()
        elif name=='w':
            botRight()
        else:
            printError()
    
    def botRight():
        print('botRight')
        name=input('You can go north or west.')
        if name=='n':
            midRight()
        elif name=='w':
            bot()
        else:
            printError()
    
    
    
    while True:
        print(location)
        if location=='topLeft':
            topLeft()
        elif location=='top':
            top()
        elif location=='topRight':
            topRight()
        elif location=='midLeft':
            midLeft()
        elif location=='mid':
            mid()
        elif location=='midRight':
            midRight()
        elif location=='botLeft':
            botLeft()
        elif location=='bot':
            bot()
        elif location=='botRight':
            botRight()

Хотя ответы, содержащие только код, могут быть полезны, ответы на этом сайте, получившие наибольшее количество голосов, содержат как код, так и объяснение того, что он делает. Вы всегда можете отредактировать и улучшить свой ответ.

Friedrich 19.08.2024 09:40

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