What book are you working through? That is a pretty interesting exercise. Paul On Thursday 26 January 2006 12:52 pm, Bob Gailer wrote: > At 08:44 AM 1/25/2006, Jon Moore wrote: > > Hi, > > I have written the program below as an exercise from a book I am working my > way through. > > Objective from book: > Write a character creator program for a role-playing-game. The player > should be given a pool of 30 points to spend on four attributes: strength, > health, wisdom and dexterity. The player should be able to spend points > from the pool on any attribute and should be also be able to take points > from an attribute and put them back in the pool. > > Although the program meets the aim of the exercise set out in the book , > there are a couple of things I am not happy with! > > 1. I am sure I have written far more code than required. Where could I have > made some shorcuts? > > 2. Should the user enter a value greater than what is available, the > program kicks the user all the way back to the main menu. How could I tidy > this up to just loop round to ask the user to try a new value? > > choice = None > > # Set max number of available points > POINTS_POOL = 30 > > # store attribute values > attributes = [["Strength", 0], ["Health", 0], ["Wisdom", 0], ["Dexterity", > 0]] > > > Some ideas to chew on as you develop skills and understanding of > programming. > Separate the "essential data" from the code. The essential data are > attributes, associated points and max_points. So > > attributes = ["Strength", "Health", "Wisdom", "Dexterity"] > points = [0, 0, 0, 0] > MAX_POINTS = 30 > > In this model the relationship between attributes and points is by > position. Later you will study and use classes; then the points list will > be replaced by a list of class instances, one per attribute. > > Develop code that operates on these lists to accomplish the various > objectives. The code itself will never refer to any attribute by name! > > For example - to list the attributes with their points: > > for x in range(len(attributes)): > print "\t",attributes[x], points[x] > > To assign values. Note I separated getting input from converting it to > integer so we can see if the user's entry is convertible.: > > available_points = MAX_POINTS - sum(points) > print "You have " + available_points + " available." > for x in range(len(attributes)): > cvalue = raw_input("How much would you like to assign to " + attributes[x] > + " ?: ")) > if cvalue.isdigit(): > value = int(cvalue) > else: > print "Number expected" > > [snip] > -- > Bob Gailer > 510-978-4454
-- Paul Kraus =-=-=-=-=-=-=-=-=-=-= PEL Supply Company Network Administrator 216.267.5775 Voice 216.267.6176 Fax www.pelsupply.com =-=-=-=-=-=-=-=-=-=-= _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor