Never saw this specific game. Some suggestions on additional factoring out of duplicate code.
def next_page(this_page): print "\n" if this_page == 0: page = 0 return
The following elif switch can be replaced by calling a selection from a list of functions:
[None, page1, pag2, ... page57][this_page]()
elif this_page == 1: page1() return elif this_page == 2: page2() return
...
elif this_page == 57: page57() return
Also, a chose3 function to complement your chose (chose2) function would avoid repeating the choose-from-3 code used on multiple pages.
Terry J. Reedy
This is what I love about this list. Where else is someone going to look at 1200+ lines of code and give you useful advice?! ;) Very cool. (Thanks Terry!)
While we're making suggestions, you might consider writing dice_roll as: def dice_roll(num, sides): return sum(random.randrange(sides) for _ in range(num)) + num for Python 2.4 or def dice_roll(num, sides): return sum([random.randrange(sides) for _ in range(num)]) + num for Python 2.3.
You also might consider writing all the pageX methods in a class, so all your globals can be accessed through self, e.g.:
class Game(object): def __init__(self): ... self.page = 1 self.computer_request = 0 ...
def page2(): print ... if self.computer_request == 1: new_clone(45) else: new_clone(32) ...
You could then have your class implement the iteration protocol:
def __iter__(self): try: while True: self.old_page = self.page yield getattr(self, "page%i" % page) except AttributeError: raise StopIteration
And then your main could look something like:
def main(args): ... instructions() more() character() more() for page_func in Game(): page_func() print "-"*79
Anyway, cool stuff. Thanks for sharing!
Steve -- http://mail.python.org/mailman/listinfo/python-list