python - 函数问题 - 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
只是想知道当单词输入不符合其他标准时,为什么这不适用于我的陈述?
解决方案
像大多数编程语言一样,if..elif...else
在 python 中按顺序工作,这意味着从您的函数if float(score)>1:
中执行该行。现在,一旦您看到完整的错误,您将看到 python 已将您指向这一行作为错误。在这一行中,它试图将任何非数字输入转换为浮点数,但它不能。因此你的错误。
如果你想解决这些问题,你必须使用异常处理。这意味着,当您没有获得所需的数据类型时,您希望避免程序崩溃。正如这里所解释的 -异常处理以及其他一些答案所建议的那样,它try...catch
派上用场了。此外,还有许多其他方法,例如switch case、类型检查等。
笔记:
- 考虑到 OP,我正在为我解释的一些方法提供链接,这些方法也可能对其他人有帮助。
- 类型检查可能总是不是一个好主意,但是是的,您可以通过类型检查解决这个问题,
if score.isnumeric()
但这仅适用于整数值,不适用于浮点数。
推荐阅读
- python - 如何根据用户输入在 python 中打印 csv 文件的特定行?
- javascript - 循环遍历节点列表的有效方法?
- reactjs - Material UI Chip 数组如何像 Angular Chip Input 一样使用?
- java - 为什么我的程序没有打印出想要的结果?
- php - 无法生成有效的 JWT 以使用 Google Functions 进行身份验证 - PHP
- python - Django 中的 Npm 包不适用于 Heroku
- sql-update - 你能在 SnowFlake 的同一张表上并行更新不同的行吗
- javascript - Highcharts 系列条形图 - 多个系列,相同的 xAxis
- html - 背景视频下新 Div 中的文本
- javascript - 反应本机:未处理的承诺拒绝:TypeError:未定义不是对象