Python 函数问题-else语句出错

Python 函数问题-else语句出错,python,Python,我一直在研究Charles Severance的《Python为所有人服务》一书。我被其中的一个问题困住了,即使是一个在线工作的例子似乎也不能完全回答这个问题 练习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: perfec

我一直在研究Charles Severance的《Python为所有人服务》一书。我被其中的一个问题困住了,即使是一个在线工作的例子似乎也不能完全回答这个问题

练习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


分数
>=0.9 A
>=0.8B
>=0.7摄氏度
>=0.6 D
1:
返回“坏分数”
elif浮动(分数)>=0.9:
返回“A”
elif浮动(分数)>=0.8:
返回“B”
elif浮动(分数)>=0.7:
返回“C”
elif浮动(分数)>=0.6:
返回'D'

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

如果你想解决这些问题,你必须使用异常处理。也就是说,当您没有获得所需的数据类型时,您希望避免程序崩溃。正如这里所解释的,
try…catch
很方便,正如其他一些答案所建议的那样。此外,还有许多其他方法,如,等等

注意:

  • 考虑到OP,我正在为我解释的一些方法添加链接,这可能对其他方法也有帮助
  • 类型检查可能不是一个好主意,但是可以通过类型检查
    if score.isnumeric()
    解决这个问题,但是这只适用于整数值,而不适用于浮点值
def计算等级(分数):
尝试:
分数=浮动(分数)
除值错误外:
返回“坏分数”
如果得分>1:
返回“坏分数”
elif得分>=0.9:
返回“A”
elif得分>=0.8:
返回“B”
elif得分>=0.7:
返回“C”
elif得分>=0.6:
返回'D'
elif评分<0.6:
返回“F”
a=计算等级(输入())
印刷品(a)

永远不会到达else,因为如果输入不是数字,则无法进行比较。错误与不真实的比较完全不同,例如,使用引发异常的事实来检测输入了无效(即非数字)的内容,并根据需要进行处理(通过
尝试
/
,除了
)。如何在此处键入提示或检查帮助?键入提示:我的观点,想要与函数交互的人至少应该知道函数期望输入的内容是什么?类型检查:如果输入错误,直接打印,或者从else块发送语句?对于此类问题,也可以使用开关盒。但是,我不认为OP在寻找这些解决方案,对吗?如果我说它是
defcomputegrade(score:str)->str:
,那么类型检查为什么没有帮助会更清楚吗?Python没有开关盒,所以没有。
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'
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)