Python 判断成绩是否合格(>=60)

109 阅读2分钟

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 再过渡