首页 > 解决方案 > 函数问题 - else 语句出错

问题描述

我一直在研究 Charles Severance 的Python for Everyone一书。我被困在其中一个问题上,即使是在线的工作示例似乎也不能完全回答这个问题。

练习 7:使用一个名为 computegrade 的函数重写上一章的成绩程序,该函数将分数作为参数并以字符串形式返回成绩。


Score

>= 0.9 A
>= 0.8 B
>= 0.7 C
>= 0.6 D
<0.6 F



Enter score: 0.95

A

Enter score: perfect

Bad score

Enter score: 10.0

Bad score

Enter score: 0.75

C

Enter score: 0.5

F

重复运行程序以测试各种不同的输入值。

我的代码是:

def computegrade(score):
    if float(score)>1:
        return 'Bad score'
    elif float(score)>=0.9:
        return 'A'
    elif float(score)>=0.8:
        return 'B'
    elif float(score)>=0.7:
        return 'C'
    elif float(score)>=0.6:
        return 'D'
    elif float(score)<0.6:
        return 'F'
    else:
        return 'Bad score'

...这似乎有效,直到我输入“完美”或任何类型的非数字输入(引发错误)。else只是想知道当单词输入不符合其他标准时,为什么这不适用于我的陈述?

标签: python

解决方案


像大多数编程语言一样,if..elif...else在 python 中按顺序工作,这意味着从您的函数if float(score)>1:中执行该行。现在,一旦您看到完整的错误,您将看到 python 已将您指向这一行作为错误。在这一行中,它试图将任何非数字输入转换为浮点数,但它不能。因此你的错误。

如果你想解决这些问题,你必须使用异常处理。这意味着,当您没有获得所需的数据类型时,您希望避免程序崩溃。正如这里所解释的 -异常处理以及其他一些答案所建议的那样,它try...catch派上用场了。此外,还有许多其他方法,例如switch case类型检查等。

笔记:

  • 考虑到 OP,我正在为我解释的一些方法提供链接,这些方法也可能对其他人有帮助。
  • 类型检查可能总是不是一个好主意,但是是的,您可以通过类型检查解决这个问题,if score.isnumeric()但这仅适用于整数值,不适用于浮点数。

推荐阅读