我对编程很新。我一直在尝试通过一本名为“绝对初学者的Python编程”的书来学习Python。我正在上课。我已经从书中的一个练习中复制了一些代码,并获得了一个Traceback(最近一次调用最后一次):和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.")
答案 0 :(得分: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"
答案 1 :(得分:1)
您似乎打算将__get_mode(self)
定义为__get_mood(self)
。
为了对您获得的NameError
做出一些澄清,由于name mangling,解释员说_Critter__get_mood is not defined
而不是__get_mood is not defined
,这是Python的一种表达{ {1}}类中的变量或方法。
答案 2 :(得分:0)
这是一个简单的错字。你定义
def __get_mode(self):
# ^^^
但访问
_Critter__get_mood
# ^^^