0

私はプログラミングが初めてです。私は「Python Programming for the Absolute Beginner」という本で Python を学ぼうとしています。授業に取り組んでいます。この本の演習の 1 つからいくつかのコードをコピーしたところ、Traceback (most recent call last): と NameError メッセージが表示されました。以下は、コードと一緒に表示されるエラー メッセージです。助けてください。ありがとう!

Traceback (most recent call last):
 File "C:\Python27\Ch8 Critter Caretaker Prg.py", line 5, in <module>
   class Critter(object):
 File "C:\Python27\Ch8 Critter Caretaker Prg.py", line 25, in Critter
   mood = property(__get_mood)
NameError: name '_Critter__get_mood' is not defined
# 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.bordedom += 1
    def __get_mode(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"

    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 "Brrupp.  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 main():
    crit_name = raw_input("What do you want to name your critter?: ")
    crit = Critter(crit_name)

    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 = raw_input("Choice: ")
        print

        # exit
        if choice == "0":
            print "Good-bye."

        # listen to your critter
        elif choice == "1":
            crit.talk()

        # feed your critter
        elif choice == "2":
            crit.eat()

        # play with your critter
        elif choice == "3":
            crit.play()

        # some unknown choie
        else:
            print "\nSorry, but", choice, "isn't a vaild choice."

main()
("\n\nPress the enter key to exit.")
4

3 に答える 3

2

modeすでに述べたように、 と の間でタイプミスをしmoodました。ただし、後でさらに問題が発生することになります。__get_mood関数は返されないため、実際にはムードになりません。propertyまた、デコレータとして使用することもできます:

@property
def mood(self):
    unhappiness = self.hunger + self.boredom
    if unhappiness < 5:
        return "happy"
    elif 5 <= unhappiness <= 10:
        return "okay"
    elif 11 <= unhappiness <= 15:
        return "frustrated"
    else:
        return "mad"
于 2012-11-11T21:21:36.077 に答える
1

代わりに定義__get_mode(self)するつもりだったようです。__get_mood(self)

あなたが得ていることについていくらか明確にするためNameErrorに、インタプリタは、名前マングリングのためで_Critter__get_mood is not definedはなく、クラス内の変数またはメソッドを示すためのPythonの空想であると言います。__get_mood is not definedprivate

于 2012-11-11T21:23:49.330 に答える
0

単純なタイプミスです。あなたが定義する

def __get_mode(self):
#          ^^^

アクセス

_Critter__get_mood
#              ^^^
于 2012-11-11T21:20:20.617 に答える