代码:
#Loop to conduct program. User input required for each option.
count = 1
while count == 1:
score = input("Enter Test Score: ")
if (score >= 90) and (score <= 100):
print "A"
elif (score >= 80) and (score <= 89):
print "B"
elif (score >= 70) and (score <= 79):
print "C"
elif (score >= 60) and (score <= 69):
print "D"
elif (score <= 59):
print "F"
elif (score == quit):
print "Program Finsihed. Goodbye."
count = 0 #Count to end loop
else:
print "Please enter valid response."
所有其他条件都有效,但是,如果键入的内容不符合参数,则代码应该再次提示它们(这是while循环的用途)。但是,只要尝试与参数不匹配的字符串,就会出现错误。
答案 0 :(得分:2)
不要使用input
。 Python 2上的input
尝试将输入作为Python表达式进行评估,因此如果键入fhqwhgads
之类的内容,Python会认为它应该是Python代码并且会抛出错误,因为那里有#39} ; s没有fhqwhgads
变量。
使用raw_input
,它以字符串形式提供输入。然后,您可以对其执行字符串操作,或者(尝试)将其转换为整数,并在转换失败时处理异常:
while True:
user_input = raw_input("Enter Test Score: ")
if user_input == 'quit':
print "Program Finsihed. Goodbye."
break
try:
score = int(user_input)
except ValueError:
print "Please enter valid response."
continue
if 90 <= score <= 100:
print "A"
elif 80 <= score < 90:
...
顺便提一下,quit
是您可以为您做的少数选择之一,我们已经在这里完成了#34;不会导致原始代码出错的选项,因为当quit
尝试将其视为Python时,有(通常)实际的input
对象要解析代码。
答案 1 :(得分:1)
您的代码存在许多问题。如果您将代码分解为功能单元,我认为查看和解决问题要容易得多。我做了两个功能:get_score
处理提示用户输入,score_to_grade
将数字分数转换为字母分数。这样做可以使代码更具可读性,并且在将来更容易重构,调试等。
def get_score():
while True:
user_in = raw_input("Enter Test Score: ")
try:
return float(user_in)
except ValueError:
if user_in == "quit":
print "Program Finished. Goodbye."
raise SystemExit
print "Please enter valid response."
def score_to_grade(score):
if score >= 90:
return "A"
elif score >= 80:
return "B"
elif score >= 70:
return "C"
elif score >= 60:
return "D"
else:
return "F"
while True:
print score_to_grade(get_score())
答案 2 :(得分:0)
Key
需要引号,因为它是一个字符串,而不是一个变量:
quit