Я продолжаю получать NameError в Python, говоря, что вещи не определены, хотя я определил их - PullRequest
0 голосов
/ 04 октября 2019

Итак, я создаю это на основе этого ресурса, связанного здесь: https://www.derekshidler.com/how-to-create-a-text-based-adventure-and-quiz-game-in-python/

РЕДАКТИРОВАТЬ: Вот ссылка GitHub на весь код: https://github.com/gabby-lucies/Quarter-1-Project/blob/master/intro.py

Яв настоящее время застрял, однако, в моем самом первом варианте, в любое время, чтобы выбрать любой из вариантов, перечисленных ниже, я получаю NameError, говоря, что мои параметры не определены. Кто-нибудь может дать мне какой-нибудь совет? Спасибо! Кроме того, извините, если это глупый вопрос.

#importing
import time

#How players could respond
answer_A = ["A", "a"]
answer_B = ["B", "b"]
answer_C = ["C", "c"]
yes = ["Y", "y", "yes"]
no = ["N", "n", "no"]

#Objects
fwomp = 0
bownarrow = 0
sword = 0
money = 0

#playerName = input("Enter Your Name: ") #gets the player's name, obviously
required = ("\nUse only A, B, or C.\n")

#Startup
def intro():
    #print("There is no saving. Sorry!")
    #print("Hello! Please enter your name.")
    #print("Nice to meet you!")
    print("Let's begin!")
    print("You wake up in a forest. You can't remember anything. You look around and find")
    print("a small creek. You hear sound nearby that sounds like some sort of woodland creature.")
    print("You also see some smoke in the distance. What would you like to do ?")
    time.sleep(2)
    #Choice 1 Options
    print("A. Follow the creek.")
    print("B. Follow the sound of the woodland creature.")
    print("C. Walk towards the smoke.")
    choice = input(">>> ") #gets choice
    time.sleep(1.5)
    if choice in answer_A:
        option_creek() #Gives player creek option
    elif choice in answer_B:
        option_animal() #Give Fwomp options
    elif choice in answer_C:
        option_smoke() #Gives smoke options
    else:
        print(required)
        intro()

def option_creek():
    print("You follow the creek for an hour, and you eventually come across the river.")
    print("You followed the river for another hour, and you found a riverside village.")
    print("You walk into the village, desperately looking for food and water.")
    print("You come across a large pub. It doesn't look very busy.")
    print("You also come across an elegant resturant. It must be very expensive.")
    print("There is also family outside of their house eating freshly picked food from their garden.")
    print("Where will you go?")
    print("A. Pub B. Resturant C. Family")
    time.sleep(2.5)
    choice = input(">>> ")
    if choice in answer_A:
        option_pub()
    if choice in answer_B:
        option_resturant()
    if choice in answer_C:
        option_family()
    else:
        print(required)
        option_creek()

def option_smoke():
    print("You walk towards the smoke. Eventually you find the source of the smoke.")
    print("The smoke is coming from a lost and very angry tribe.")
    print("They also don't speak your language.")
    print("When they spot you, and you have nothing to offer them in return, so they assume you are there to kill them.")
    print("Anways, fifty of them shot you with arrows all at once.")
    time.sleep(2)
    print("Also, you're dead!")
    time.sleep(2)
    option_smoke()


def option_animal():
    print("Seriously, you walked towards a strange animal sound just like that?")
    print("Luckily, it is only a Fwomp. It doesn't kill you, but it does glare at you strangely.")
    print("Fwomps are cute, so you want to pet it.")
    print("You also want to take the Fwomp.")
    print("You're also hungry and horrible so you also kind of want to eat the Fwomp.")
    print("What will you do?")
    print("A. Pet Fwomp B. Take Fwomp C. Eat Fwomp") 
    time.sleep(2.5)
    choice = input(">>> ")
    if choice in answer_A:
        fwomp = 1
        option_petfwomp()
    elif choice in answer_B:
        fwomp = 1
        option_takefwomp()
    elif choice in answer_C:
        option_eatfwomp()
    else:
        print(required)
option_animal()

Ответы [ 2 ]

2 голосов
/ 04 октября 2019

Я просмотрел ваш код GitHub, поэтому я изменяю свой ответ для этого

После каждой из ваших опционных функций вы немедленно вызываете ее, как показано здесь

def option_animal():
    print("Seriously, you walked towards a strange animal sound just like that?")
    print("Luckily, it is only a Fwomp. It doesn't kill you, but it does glare at you strangely.")
    print("Fwomps are cute, so you want to pet it.")
    print("You also want to take the Fwomp.")
    print("You're also hungry and horrible so you also kind of want to eat the Fwomp.")
    print("What will you do?")
    print("A. Pet Fwomp B. Take Fwomp C. Eat Fwomp") 
    time.sleep(2.5)
    choice = input(">>> ")
    if choice in answer_A:
        fwomp = 1
        option_petfwomp()
    elif choice in answer_B:
        fwomp = 1
        option_takefwomp()
    elif choice in answer_C:
        option_eatfwomp()
    else:
        print(required)
option_animal()

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

Надеюсь, это поможет

0 голосов
/ 04 октября 2019

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

What will you do?
A. Pet Fwomp B. Take Fwomp C. Eat Fwomp

Если я наберу «А» и нажму «Ввод», он запустится option_petfwomp()

Но в вашем коде вы не определили эту функцию.

Если вы добавите:

def option_petfwomp():
    print("option_petfwomp")

def option_takefwomp():
    print("option_takefwomp")

def option_eatfwomp():
    print("option_eatfwomp")

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

Мой совет:

  1. Подумайте о том, что вы хотите, чтобы ваш код делал.
  2. Составьте карту в виде диаграммы или псевдо-кода.
  3. Кодируйте его.

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

...