为什么其他条件不适用于Python If-else语句?

时间:2016-04-05 02:36:38

标签: python if-statement while-loop

代码:

#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循环的用途)。但是,只要尝试与参数不匹配的字符串,就会出现错误。

3 个答案:

答案 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