-1

我一直在研究 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只是想知道当单词输入不符合其他标准时,为什么这不适用于我的陈述?

4

2 回答 2

0

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

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

笔记:

  • 考虑到 OP,我正在为我解释的一些方法提供链接,这些方法也可能对其他人有帮助。
  • 类型检查可能总是不是一个好主意,但是是的,您可以通过类型检查解决这个问题,if score.isnumeric()但这仅适用于整数值,不适用于浮点数。
于 2020-12-13T08:59:02.317 回答
0
def computegrade(score):
    try:
        score = float(score)
    except ValueError:
        return 'Bad Score'
            
    if score > 1:
        return 'Bad score'
    elif score >= 0.9:
        return 'A'
    elif score >= 0.8:
        return 'B'
    elif score >= 0.7:
        return 'C'
    elif score >= 0.6:
        return 'D'
    elif score < 0.6:
        return 'F'

a = computegrade(input())
print(a)
于 2020-12-13T09:17:35.480 回答