Эта проблема меня всегда беспокоила. Я переделывал эту программу несколько раз на протяжении многих лет, но результаты были одинаковыми; программа игнорирует все операторы 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? Он даже делает это, даже если вариантов всего два. Я запускаю какой-то отказоустойчивый механизм? Что здесь происходит?
Вы определяете каждое из своих местоположений (верхнее, среднее и т. д.) как строку и функцию. Определение функции появляется позже, поэтому оно имеет приоритет. Это означает, что каждое условие в вашем цикле 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()
Хотя ответы, содержащие только код, могут быть полезны, ответы на этом сайте, получившие наибольшее количество голосов, содержат как код, так и объяснение того, что он делает. Вы всегда можете отредактировать и улучшить свой ответ.