【问题标题】:Why wont else condition work on Python If-else statement? [closed]为什么 Python If-else 语句的 else 条件不起作用? [关闭]
【发布时间】:2016-07-24 19:00:14
【问题描述】:

代码:

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

【问题讨论】:

  • 你应该把代码放在问题中。所有链接最终都会腐烂。

标签: python if-statement while-loop


【解决方案1】:

quit 需要用引号引起来,因为它是字符串,而不是变量:

...
elif (score == "quit")
...

【讨论】:

  • 退出实际上效果很好。它的 else 不会执行。如果我在输入中输入 quit,则程序成功结束。如果我在退出中添加引号,那么 else 将起作用,告诉我添加有效响应并且程序不会终止。
  • 好吧,如果您输入除数字以外的任何内容,它就会退出,对吗?我认为可能发生的情况是,一旦 python 评估“退出”,它就会退出循环,而不是实际检查你是否输入了“退出”。
  • 但是不是只有满足'quit'的条件就会终止吗?
  • 抱歉,我不确定我是否理解您的要求。您是否尝试过我在回答中建议的编辑?问题还存在吗?
  • 如果我在退出中添加引号,那么“else”将起作用,告诉我添加有效响应但程序不会终止。所以它不能识别字符串'quit'。
【解决方案2】:

不要使用input。 Python 2 上的 input 尝试将输入评估为 Python 表达式,因此如果您键入类似 fhqwhgads 的内容,Python 会认为这应该是 Python 代码并抛出错误,因为没有 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 是您可以为“我们已经完成”选项做出的少数选择之一,它不会导致原始代码出错,因为(通常)有一个实际的 @987654328当input 尝试将其视为 Python 代码时,@object 将被解析。

【讨论】:

    【解决方案3】:

    您的代码存在很多问题。我认为如果您将代码分解为功能单元,那么查看和解决问题会容易得多。我做了两个函数: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())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多