这是代码:
# 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
@property
def mood(self):
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):
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("Whee!")
self.boredom -= fun
if self.boredom < 0:
self.boredom = 0
self.__pass_time()
crit_name = 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
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":
crit.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.")
input("\n\nPress the enter key to exit.")
当我在IDLE中运行它时,它完全正常但是当我保存文件并双击该文件时,它将无法正常运行。例如,当我从“0” - “3”中选择有效选项时,它会打印 - “不是有效选择”。但即使它不是一个有效的选择,它应该打印“抱歉,但 - 不是一个有效的选择”。
抱歉我的英语。如果你对我的英语感到困惑,请告诉我。顺便说一句,我目前正在从Michael Dawson的一本名为“Python Programming for Absolute Beginner”的书中学习Python。我应该完成本书还是应该找到另一种学习Python的方法?
答案 0 :(得分:0)
看起来很像你的IDLE安装与其他地方访问的版本有不同的Python版本。
您可以做的一件事是在脚本顶部添加对版本的检查,以查看您正在运行的版本:
import sys
print(sys.version)
您可以做的另一件事是尝试使用字符串语法输入"3"
之类的选项,看看它是否有效。如果确实如此,当您尝试从IDLE外部运行时,您正在运行Python 2的版本。
如果从Python 3转到Python 2,主要的问题是input()
函数的行为。 Python 3的input
函数与Python 2中的raw_input
函数相同。
在Python 2中input
只是尝试执行你输入的任何内容,如果它是有效的Python代码。在Python 3 input
中,只需将您输入的内容存储为字符串。
所以在Python 2中:
choice = input("Choice: ")
Choice: 3
print(choice)
3
使choice
为整数3.这将在您的检查中比较false,因为3 == "3"
将始终为false。 (因为与integer和string的任何比较都是False)
然而,Python 3中的相同代码有点不同:
choice = input("Choice: ")
Choice: 3
print(choice)
"3"
这里的代码可以满足你的期望。希望这能解释在IDLE中使用Python 3.x的代码如何工作以及Python 2.x运行时的代码是如何工作的。