Pergunta

I'm powering my way through Zed Shaw's LPTHW and I've come upon a snag in (new) Exercise 43 Extra Credit 3.

So here I am trying to make a function, to print another function that is one big doc string.

Here is the engine

class Game(object):

    def __init__(self, start):
        self.quips = [
            "You died.  You kinda suck at this.",
            "Your mom would be proud. If she were smarter.",
            "Such a luser.",
            "I have a small puppy that's better at this."
        ]
        self.start = start

    def play(self):
        # next_room_name is taken from init argument start
        next_room_name = self.start

        while True:
            print "\n--------"
            # set variable room to get function from next_room_name
            room = getattr(self, next_room_name)
            # unpacks function from next_room_name into room
            next_room_name = room()

            room = current_room
            print current_room.__doc__

And here is some of the function I am trying to call to start the game.

    def central_corridor(self):
        """
The Gothons of Planet Percal #25 have invaded your ship and destroyed
your entire crew.  You are the last surviving member and your last
mission is to get the neutron destruct bomb from the Weapons Armory,
put it in the bridge, and blow the ship up after getting into an 
escape pod. 

You're running down the central corridor to the Weapons Armory when
a Gothon jumps out, red scaly skin, dark grimy teeth, and evil clown costume
flowing around his hate filled body.  He's blocking the door to the
Armory and about to pull a weapon to blast you.
        """

        action = raw_input("> ")

        if action == "shoot!":
            print "Quick on the draw you yank out your blaster and fire it at the Gothon."
            print "His clown costume is flowing and moving around his body, which throws"
            print "off your aim.  Your laser hits his costume but misses him entirely.  This"
            print "completely ruins his brand new costume his mother bought him, which"
            print "makes him fly into an insane rage and blast you repeatedly in the face until"
            print "you are dead.  Then he eats you."
            return 'death'

        elif action == "dodge!":
            print "Like a world class boxer you dodge, weave, slip and slide right"
            print "as the Gothon's blaster cranks a laser past your head."
            print "In the middle of your artful dodge your foot slips and you"
            print "bang your head on the metal wall and pass out."
            print "You wake up shortly after only to die as the Gothon stomps on"
            print "your head and eats you."
            return 'death'

        elif action == "tell a joke":
            print "Lucky for you they made you learn Gothon insults in the academy."
            print "You tell the one Gothon joke you know:"
            print "Lbhe zbgure vf fb sng, jura fur fvgf nebhaq gur ubhfr, fur fvgf nebhaq gur ubhfr."
            print "The Gothon stops, tries not to laugh, then busts out laughing and can't move."
            print "While he's laughing you run up and shoot him square in the head"
            print "putting him down, then jump through the Weapon Armory door."
            return 'laser_weapon_armory'

        else:
            print "DOES NOT COMPUTE!"
            return 'central_corridor'

And here is how its called in the main program

a_game = Game("central_corridor")
a_game.play()

But all I get is

--------
> 

EDIT: In order to complete the exercise successfully, I need to edit the engine to print out the docstrings as opposed to editing the function.

Foi útil?

Solução

The way you have it now, current_room will never change, so it will always print the docstring of whatever the initial value of current_room was, if anything.

It seems that you don't need current_room at all. You can remove the line room = current_room and just write:

print room.__doc__

Edit: I looked at the actual exercise and apparently there's more in central_corridor than you have shown in your question - it asks the user for input. Since you want the docstring to be displayed before the user input, you should print the docstring before calling room().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top