On Wed, Feb 25, 2009 at 2:32 AM, nathan virgil <sdragon1...@gmail.com> wrote: > Erm, it's still not working... > > Whenever I try to use the talk method (which reports the mood, and doesn't > take parameters), it says I gave it too many parameters. Maybe it might help > if I posted the code in it's entirety.... > > > # Critter Caretaker > # A virtual pet to care for > > class Critter(object): > """A virtual pet""" > def __init__(self, name, hunger = 0, boredom = 0): > self.name = name > self.hunger = hunger > self.boredom = boredom > > def __pass_time(self): > self.hunger += 1 > self.boredom += 1 > > def __get_mood(self): > unhappiness = self.hunger + self.boredom > if unhappiness < 5: > mood = "happy" > elif 5 <= unhappiness <= 10: > mood = "okay" > elif 11 <= unhappiness <= 15: > mood = "frustrated" > else: > mood = "mad" > return mood > > mood = property(__get_mood) > > def talk(self): > print "I'm", self.name, "and I feel", self.mood, "now.\n" > self.__pass_time() > > def eat(self, food = 4): > print "Brruppp. Thank you." > self.hunger -= food > if self.hunger < 0: > self.hunger = 0 > self.__pass_time() > > def play(self, fun = 4): > print "Wheee!" > self.boredom -= fun > if self.boredom < 0: > self.boredom = 0 > self.__pass_time() > > def backdoor(self): > print "hunger:", self.hunger, "boredom:", self.boredom > > def quit(): > print "God-bye!" > > > def main(): > crit_name = raw_input("What do you want to name your critter?: ") > crit = Critter(crit_name) > > selection = None > while selection != "0": > print \ > """ > Critter Caretaker > > 0 - Quit > 1 - Listen to your critter > 2 - Feed your critter > 3 - Play with your critter > """ > > selection = raw_input("Choice: ") > choices = {"0":(quit, None), "1":(crit.talk, None), "2":(crit.eat, > 3), "3":(crit.play, 3), "Xyzzy":(crit.backdoor, None)} > if selection in choices: > choice = choices[selection] > choice[0](choice[1])
Yes, that won't work - you are now calling 'quit' and 'talk' with the argument 'None' rather than without an argument. One way to resolve this would be to use my proposal: take out the "None"s (but keep the comma before it) and chance this line to choice[0](*choice[1:]) which also has the advantage of still working with more than one argument Another would be to not change the definition of choices, but replace choice[0](choice[1]) by: if not choice[1] is None: choice[0](choice[1]) -- André Engels, andreeng...@gmail.com _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor