Почему я получил ошибку из этого кода python?

#python

#python

Вопрос:

У меня есть вопрос по этому коду, который я пытаюсь написать. В нем говорится об ошибке с «NameError: имя ‘answer’ не определено в строке 1». Может кто-нибудь указать, что не так?

 def main():

  answer = input("Would you like to play a game? yes or no")

if (answer == "yes"):

  firstChoice = input(

    "There was once a knight, stuck in a forest trying to look for a princess. The knight had 2 ways he could go. Should he go left, or right?"

  )

if (answer == "left"):

  secondChoice = input(

    "He decides to go left. As he passes the trees, he sees something he hasn’t seen before. A GIANT DRAGON! He pulls out one of his weapons. Which weapon did he pull out? Oversized Sword or Flamethrower?"

  )

if (answer == "mighty sword"):

  thirdChoice = input("He pulls out his mighty weapon. It was about as tall as a bus! The dragon said, Wait, just the size of a bus? I’m like, 200 buses. The knight, realizing that his choice was stupid, got the heck out of there! The dragon, being the 200 buses that he is, couldn’t find the puny mortal. He decided to brush it off and went to his dome. The poor knight, out of breath, gets a drink of water from a creek. The knight says, Wait, I know this creek! This is the Golden Creek, so if I follow this path, the dome should be right there! The knight decides to go with his gut and follow the path. And before he knows it, the princess was trapped inside of the dragon’s dome! He knew he had to do something, but what? Should he sneak in, or barge in alone?")

if (answer == "sneak in"):

  print("He tries to sneak in. Getting past every dragon guard, was surprisingly easy. Their eyes are on the side of their head, so if you just walk in front of them, you should be good.  Luckily, when the knight came, the dragon was asleep. He needed crucial silence, where not the single creek of wood, or cling of the armor could wake up the dragon. The knight whispers to the princess, I have come to save you! The princess carefully follows the brave knight, and they make it out! The king is happy with your success in keeping the princess alive, and you are promoted to secretary, the highest rank below the king! YOU WIN")
  

Комментарии:

1. Убедитесь, что ваш отступ правильный. Отступ имеет значение в Python.

2. Понимание main: realpython.com/python-main-function

Ответ №1:

Это ошибка области видимости. Вы инициализируете answer в своем основном методе, однако, как только этот метод закрывается, переменная удаляется. 3 оператора if не имеют доступа к этой переменной.

Комментарии:

1. На самом деле код сначала не был отформатирован. Кто-то отредактировал, чтобы сделать его доступным для чтения, и было невозможно понять код. Редактор решил сделать это так, но операторы if также могут быть функциональными. Не могу быть уверен, если OP не редактирует собственный код.

2. Да, это то, что, вероятно, произошло, но я просто дал ответ для точного кода, который был отправлен.

Ответ №2:

Во-первых, вам не нужно использовать круглые скобки в if операторах. Ошибка, вероятно, вызвана тем, что при определении функции не используется вкладка. Извините за предложение IDE, не знаю, как вы могли скопировать и вставить текст…

Ответ №3:

Без запуска вашего кода я вижу большую проблему, возможно, вы захотите попробовать это

После каждого входного тега вы говорите «if answer ==», но помните, что переменная ответа будет первой, которую введет пользователь

поэтому, если они поставят «да», переменная ответа всегда будет «да» на протяжении всего скрипта, если вы не переопределите ее

РЕДАКТИРОВАТЬ Когда я впервые ответил, сообщение было не полностью в блоке кода, поэтому я не мог видеть отступ

Ответ №4:

Переменная answer находится только внутри main() , чтобы использовать ее вне main() вас, вы должны определить ее глобально, то есть перед основной функцией

Ответ №5:

На самом деле, вам просто нужно использовать global перед объявлением.