Python 函数问题-else语句出错
我一直在研究Charles Severance的《Python为所有人服务》一书。我被其中的一个问题困住了,即使是一个在线工作的例子似乎也不能完全回答这个问题 练习7:重写上一章的成绩计划,使用 一个名为computegrade的函数,它以分数作为参数,并 以字符串形式返回等级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
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)