05. 判断成绩是否合格(>=60)
燎然,你刚才贴出的源代码是:
python
复制
def get_grade(prompt):
while True:
grade=input(prompt)
try:
if float(grade)>0:
return float(grade)
else:
return ("please input a grade")
except ValueError:
return ("please input a grade")
def if_pass(grade):
if grade-60>0:
return "pass"
else:
return "fail"
if __name__=="__main__":
grade=get_grade("input grade ")
print(if_pass(grade))
❌ 问题1:输入非法值时直接 return 字符串,程序提前退出
python
复制
except ValueError:
return ("please input a grade")
这个 return 是错误的!
你应该 print() 提示用户,然后继续 while 循环,而不是直接 return 结束函数!
❌ 问题2:当分数为 0 或负数时,同样 return 字符串
python
复制
if float(grade)>0:
return float(grade)
else:
return ("please input a grade")
这也会导致主程序接收到字符串而不是数字,从而导致错误。
✅ 简洁写法(Pythonic 风格)
python
复制
def if_pass(grade):
return "pass" if grade >= 60 else "fail"
- 一行写完;
- 更直观;
- 性能和逻辑都没问题。
你说的这一句代码:
python
复制
return "pass" if grade >= 60 else "fail"
它的写法确实和 if...else... 结构不太一样,让我来一口气帮你彻底搞懂:
✅ 这是什么写法?
这是 Python 的 三元表达式(也叫条件表达式),语法是:
arduino
复制
结果1 if 条件 else 结果2
意思是:
👉 如果“条件”成立,就返回“结果1”,否则返回“结果2”。
✅ 对比传统 if-else 的区别
写法1:传统方式(结构完整,有冒号、缩进)
python
复制
def if_pass(grade):
if grade >= 60:
return "pass"
else:
return "fail"
- 有冒号
: - 有缩进
- 可读性强,但代码多
写法2:三元表达式(更短更清爽)
python
复制
def if_pass(grade):
return "pass" if grade >= 60 else "fail"
- 冒号和缩进都省略了(因为是表达式不是语句块)
- 结构只有一行
- 非常适合简单判断
- 也更“Pythonic”(更符合 Python 的简洁哲学)
🧠 什么时候用三元表达式?
场景
推荐
判断简单,值只有两个
✅ 强烈推荐
判断复杂,有多个步骤
❌ 建议用传统 if-else
想写一行返回值
✅ 非常适合
新手不熟练
可以先用 if-else 再过渡