我的Python迷你游戏。这让我很困惑: - (

时间:2016-07-30 15:54:47

标签: python-2.7

我正在使用Python 2.7并学习Python The Hard Way书。

但是,我有一些创意,我想在这个练习中做一些改变:http://learnpythonthehardway.org/book/ex35.html

所以我写了自己的代码:

from sys import exit

times_in_exchange_path = 0
asked_for_help = 0

def exchange_path():
    print "Hola! You are about to get to the very dangerous point, kid!"
    print "You are independent from now. With luck..."

    action = raw_input('...')

    if 'what' in action:
        print 'I said you are on your own now. No one is gonna help you',
        print "with anything..."
        exchange_path()
    elif 'creepy' in action:
        print "I found it creepy, too. Kid. Take me out of here with you."
        print "Is that OK?"
        haunted = False

        decision = raw_input()

        if decision == 'agree':
            print "Finally. I'm free!"
            haunted = True
            times_in_exchange_path = times_in_exchange_path + 1
            start()
        else:
            dead("I will make you know what pain really is!!?! >:(")

    else:
        dead("A shadow barged into you, and you broke your neck.")

def gold_room():
    print "This room is full of gold.  How much do you take?"

    choice = raw_input("> ")
    try:
        how_much = int(choice)
    except:
        dead("Man, learn to type a number.")

    if how_much < 50:
        print "Nice, you're not greedy, you win!"

        if haunted:
            print "\nHowever... I can't just let you get away easily like this."
            print '"Why??" - I asked'
            print "You belong to the gold mine now!!"
            print '"What do you mean??" - I replied in fear'
            print "Power requires sacrifice. Muhahahhaha!"
            dead(" ")
        else:
            exit(0)

    else:
        dead("You greedy bastard! It's a trap for you!")

def bear_room():
    print "There is a bear here."
    print "The bear has a bunch of honey."
    print "The fat bear is in front of another door."
    print "How are you going to move the bear?\n"
    bear_moved = False

    if haunted:
        print "...Wait. The bear suddenly shouts at you, break the window",
        print "and runs far far away."
        print "Let's go to the door, kid...\n\n"
        gold_room()
    else:
        while True:
            choice = raw_input("> ")

            if choice == "take honey":
                dead("The bear looks at you then slaps your face off.")
            elif choice == "taunt bear" and not bear_moved:
                print "The bear has moved from the door. You can go through",
                print "it now."
                bear_moved = True
            elif choice == "taunt bear" and bear_moved:
                dead("The bear gets pissed off and chews your leg off.")
            elif choice == "open door" and bear_moved:
                gold_room()
            else:
                print "I got no idea what that means."


def cthulhu_room():
    print "Here you see the great evil Cthulhu."
    print "He, it, whatever stares at you and goes insane."
    print "Do you flee for your life or he eats your head?"
    cthulhu_dead = False

    choice = raw_input("> ")

    if cthulhu_dead:
        print "There's nothing here, kid. Except of the light and a dead body."
        print "Let's go!\n...\n\n"
        start()
    else:

        if "flee" in choice:
            start()
        elif "head" in choice:
            dead("Well that was tasty!")
        elif "fight" in choice:

            if haunted:
                print "With mysterious distraction, the Cthulhu turns his back",
                print "at you. You use the shiny magical spear nearby to kill",
                print "the monster."
                cthulhu_dead = True
                print "\n...\n"
                start()
            else:
                dead("Awesome tasty head you have!")

        else:
            cthulhu_room()


def dead(why):
    print why, "\n\nGood job! You died."
    exit(0)


def first_assist():
    asked_for_help += 1

    if asked_for_help in range(4, 6):
        print "Stop! You are attracting them!"
        print "A portal shows up and you are walking into it...\n\n"
    elif asked_for_help > 5:
        dead("Those demons rise from the ground. And burn you down!")
    else:
        print "Hi! I am your beautiful assistance."
        print "As you got lost in here, I will show you the way."
        print "You have to know that all three paths are dangerous, and there",
        print "is no way out of here.\nSo, try to survive with glory."
        print '"left", "right" and "front" are the first three spells you use.'
        print "There's a mighty power near here. Have a pure heart, and know",
        print "that you will never have to touch that evil power..."
        print "Good luck from here... Be wise."
    start()


def start():
    print "You are in a dark room."
    print "There is a door to your right and left."
    print 'And a middle path, full of darkness, in front of you.'
    print "Which one do you dare to take?"

    choice = raw_input("> ")

    if choice == "left":
        bear_room()
    elif choice == "right":
        cthulhu_room()
    elif choice == "front":

        if times_in_exchange_path == 0:
            exchange_path()
        else:
            print "You feel something stopping you from entering this place. \n"
            start()

    elif "help" in choice:
        first_assist()
    else:
        dead("You stumble around the room until you starve.")


start()

但由于某些原因,我的代码无法正常运行。

它首先在屏幕上打印出这样的行:

  

你在一个黑暗的房间里。

     

左右有一扇门

     

一条充满黑暗的中间道路

     

你敢拿哪一个?

然后,无论我输入什么内容,程序都会出错。我不知道为什么。

请帮我解决这个问题。

非常感谢你。 : - )

1 个答案:

答案 0 :(得分:0)

首先,当您提出问题时,您应该包含错误消息。

Traceback (most recent call last):
  File "game.py", line 174, in <module>
    start()
  File "game.py", line 159, in start
    cthulhu_room()
  File "game.py", line 120, in cthulhu_room
    cthulhu_room()
  File "game.py", line 104, in cthulhu_room
    start()
  File "game.py", line 159, in start
    cthulhu_room()
  File "game.py", line 104, in cthulhu_room
    start()
  File "game.py", line 157, in start
    bear_room()
  File "game.py", line 66, in bear_room
    if haunted:
NameError: global name 'haunted' is not defined

这是我逃离克苏鲁后右转时的错误。

这里的问题是haunted是在函数exchange_path内定义的。问题是函数内部定义的变量是该函数的本地变量,不能在其他函数中使用。这样做会导致两个unqiue变量(尽管名称相同)。

简单的解决方案(尽管不推荐)是在最外层的范围内定义haunted,在脚本的最开始处与asked_for_helptimes_in_exchange_path一起定义,然后使用关键字global告诉python变量haunted实际上是一个全局变量而不是局部变量。

...
asked_for_help = 0
haunted = False    # Or False, whatever you choose

def exchange_path():
    global haunted
    ...
    if haunted:
        ...

通常,不建议使用全局变量,而应将变量作为参数传递。