[Tutor] Problem
Mazen Harake
mazen.harake at gmail.com
Fri Jun 17 09:37:06 CEST 2011
self doesn't refer to anything?
It is undefined because it is in main and not in a method of an object.
You have to do crit.talk() where crit is an object (which by the way
isn't, you have crit1 and crit2)
On 17 June 2011 09:28, David Merrick <merrickdav at gmail.com> wrote:
> # Critter Caretaker
> # A virtual pet to care for
> class Farm(object):
> #A collection of Critters
>
> def talk(self,farm):
> farm.talk()
>
>
>
> class Critter(object):
>
> """A virtual pet"""
> def __init__(self, name, hunger = 0, boredom = 0):
> self.name = name
> self.hunger = hunger
> self.boredom = boredom
>
> # __ denotes private method
> def __pass_time(self,farm):
> self.hunger += 1
> self.boredom += 1
> self.__str__()
>
> def __str__(self,farm):
> print("Hunger is",self.hunger, "Boredom is " ,self.boredom)
> print("Unhappines is ",self.hunger + self.boredom," and Mood is
> ",self.mood)
>
>
>
> @property
> def mood(self,farm):
> unhappiness = self.hunger + self.boredom
> if unhappiness < 5:
> m = "happy"
> elif 5 <= unhappiness <= 10:
> m = "okay"
> elif 11 <= unhappiness <= 15:
> m = "frustrated"
> else:
> m = "mad"
> return m
>
> def talk(self,farm):
> print("I'm", self.name, "and I feel", self.mood, "now.\n")
> self.__pass_time()
>
>
> def eat(self,farm):
> food = int(input("Enter how much food you want to feed your critter:
> "))
> print("Brruppp. Thank you.")
> self.hunger -= food
> # hunger = 0 at iniatition
> # self.hunger = self.boredom - food
> if self.hunger < 0:
> self.hunger = 0
> self.__pass_time()
>
>
> def play(self,farm):
> fun = int(input("Enter how much fun you want your critter to have:
> "))
> print("Wheee!")
> self.boredom -= fun
> # boredom = 0 at iniatition
> # self.boredom = self.boredom - fun
> if self.boredom < 0:
> self.boredom = 0
> self.__pass_time()
>
>
> def main():
> ## crit_name = input("What do you want to name your critter?: ")
> ## crit = Critter(crit_name)
>
> crit1 = Critter("Sweetie")
> crit2 = Critter("Dave")
> farm = [crit1,crit2]
>
> choice = None
> while choice != "0":
> print \
> ("""
> Critter Caretaker
>
> 0 - Quit
> 1 - Listen to your critter
> 2 - Feed your critter
> 3 - Play with your critter
> """)
>
> choice = input("Choice: ")
> print()
>
> # exit
> if choice == "0":
> print("Good-bye.")
>
> # listen to your critter
> elif choice == "1":
> self.talk()
>
> # feed your critter
> elif choice == "2":
> crit.eat()
>
> # play with your critter
> elif choice == "3":
> crit.play()
>
> # some unknown choice
> else:
> print("\nSorry, but", choice, "isn't a valid choice.")
>
>
>
>
>
> main()
> ("\n\nPress the enter key to exit.")
>
> Critter Caretaker
>
> 0 - Quit
> 1 - Listen to your critter
> 2 - Feed your critter
> 3 - Play with your critter
>
> Choice: 1
>
> Traceback (most recent call last):
> File "D:\David\Python\programs\critter_farm2.py", line 118, in <module>
> main()
> File "D:\David\Python\programs\critter_farm2.py", line 100, in main
> self.talk()
> NameError: global name 'self' is not defined
>>>>
>
> --
> Dave Merrick
>
> merrickdav at gmail.com
>
> Ph 03 3423 121
> Cell 027 3089 169
>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
>
More information about the Tutor
mailing list