Python · Day 11

函数中的
条件判断

第十一天,我把昨天学习的函数和以前的条件判断组合起来。函数不再只完成固定计算,而是可以根据传入的数据,选择并返回不同结果。

让函数判断成绩

参数 score 负责接收调用函数时传入的成绩,函数再通过条件判断返回字符串。

day11.py
def check_score(score):
    if score >= 60:
        return "及格"
    else:
        return "不及格"

user_score = int(input("请输入你的成绩:"))
result = check_score(user_score)
print("成绩结果:", result)

输入 60 时返回“及格”,输入 50 时返回“不及格”,说明边界值和两个分支都运行正确。

函数内外为什么使用不同变量

user_score 在函数外保存用户输入,调用函数时把它保存的数字传进去;函数内部的参数 score 接收这个数字。传递的是值,不要求两边变量名相同。

如果用户输入 75,过程就是:user_score = 75 → 调用 check_score(user_score) → 函数内部本次得到 score = 75 → 返回结果给 result

正确理解赋值语句的顺序

今天总结出一个很有用的阅读方法,但也明确了它的适用范围:程序整体仍然从上到下执行;遇到 变量 = 表达式 时,先计算等号右边,再把结果保存到左边。

day11.py
user_score = int(input("请输入成绩:"))
result = check_score(user_score)

第一行先输入并转换,再保存到 user_score;第二行先调用函数并取得返回值,再保存到 result。不能把这个规则简单概括成“所有代码都从右往左”。

完整的成绩等级判断

检查正常等级之前,先排除小于 0 或大于 100 的错误输入,否则 120 也会满足“大于等于 90”。

day11.py
def check_score(score):
    if score > 100 or score < 0:
        return "输入错误"
    elif score >= 90:
        return "优秀"
    elif score >= 80:
        return "良好"
    elif score >= 60:
        return "及格"
    else:
        return "不及格"

依次测试 120、95、85、70、50 和 -10,错误范围与四个正常等级全部得到正确结果。

return 会立即结束函数

函数执行到 return 时,会送出结果并立即结束本次调用。因此,写在同一函数中且位于 return 后面的代码不会执行。

return_test.py
def test_return():
    print("函数开始")
    return "函数返回的结果"
    print("函数结束")

result = test_return()
print(result)

我正确判断出“函数结束”不会出现。终端只会显示“函数开始”,以及最后通过 print(result) 显示的返回结果。return 本身并不负责打印。

学习建议生成器

最后,我制作了一个函数,根据当天学习分钟数返回不同建议,同时先检查负数输入。

study_advice.py
def get_study_advice(minutes):
    if minutes < 0:
        return "输入错误,时间不能小于0"
    elif minutes >= 60:
        return "今日学习目标已经完成"
    elif minutes >= 30:
        return "已经完成一半以上,继续坚持"
    else:
        return "先从完成30分钟开始"

study_minutes = int(input("请输入今天学习的分钟数:"))
advice = get_study_advice(study_minutes)
print("学习建议:", advice)

测试 -10、20、45 和 60,分别进入错误、起步、继续坚持和完成目标四个分支,结果全部正确。

今天真正弄懂了什么

  • 参数负责接收函数调用时传入的值
  • 函数外变量和函数参数可以使用不同名称
  • 赋值语句先计算右边,再把结果保存到左边
  • 程序整体仍然按照从上到下的顺序执行
  • 函数可以使用条件判断返回不同结果
  • 判断等级时要先处理错误范围,再处理正常范围
  • return 会立即结束函数,但不会自动打印结果

今天不仅会把判断写进函数,也开始能沿着数据的传递方向阅读程序:输入保存到变量,变量传入参数,函数判断后返回结果,外部变量再接住它。