[Tutor] Hands-on beginner's project?

bob gailer bgailer at gmail.com
Wed Jun 25 15:22:55 CEST 2008


Jacqui wrote:
> Hi, I'm a total newbie too, and I'm kind of replying to see if my
> instinct on the whole GOTO thing is correct. It's hard to learn a
> language without any feedback!
>
> I used GW and Color Basic when I was a kid so I know all about GOTO (and
> it was a mess! I programmed one of those interactive stories in grade 12
> using it, it took all semester and was anything but elegant!)
>
> I would expect with Python, instead of using GOTO you use defined
> functions.
>
> So for instance, you could define chapters as functions
>
>
> def chapter2():
> 	print "You've chosen to leap over the chasm"
> 	print "too bad you forgot you were carrying an anvil"
> 	print "What part of b-bye don't you understand?"
>   

Even better is to define a Chapter class, with the various properties 
and methods pertinent thereto, then make each chapter an instance of 
that class.

class Chapter:

  def __init__(self, desc, ques=None, **actions):
    self.desc = desc
    self.ques = ques
    self.actions = actions
    self.prompt = ", ".join(actions.keys())
    
  def describe(self):
    print self.desc

  def ask(self):
    if self.ques:
      print self.ques
      for i in range(10):
        ans = raw_input(self.prompt).lower()
        next = self.actions.get(ans, None)
        if next:
          return next
        else:
          print "Invalid response"
      else:
        print "Too many failed attempts"
      
def main():
  chapters = [None]*11 # allow for 10 chapters starting with 1
  chapters[1] = Chapter("Ahead of you, you see a chasm.", "Attempt to 
jump over it?", y=2, n=3)
  chapters[2] = Chapter("Oops - that anvil is heavy. You die.")
  chapters[3] = Chapter("Good choice.", "Pick a direction", n=4, s=5)
  chapters[4] = Chapter("It's cold in here.", "Pick a direction", e=1, w=2)
  chapters[5] = Chapter("It's hot in here.", "Pick a direction", u=6, d=3)
  chapters[6] = Chapter("Congratulations - you found the gold.")
  next = 1
  while True:
    chapter = chapters[next]
    chapter.describe()
    next = chapter.ask()
    if not next:
      print "Game over"
      break

main()   

-- 
Bob Gailer
919-636-4239 Chapel Hill, NC



More information about the Tutor mailing list