feat(python进阶): 完成第三至第八课教学内容

This commit is contained in:
zhiye.sun
2026-08-07 17:14:48 +08:00
parent f7c820b0f4
commit aff05283a2
21 changed files with 3504 additions and 13 deletions

View File

@@ -0,0 +1,58 @@
# 第 2-3 课课堂练习:异常处理
#
# 请先阅读讲义并运行完整示例,再按照顺序完成练习。
# 不要删除题目、测试数据、预期结果和自查注释。
# 本练习只读取当前课程目录中的 practice_data 文件,不删除或覆盖其他文件。
# 第一部分:定义 parse_score(score_text) 函数
# 1. 参数 score_text 接收一个字符串。
# 2. 在 try 中使用 int(score_text) 转换为整数,并保存结果。
# 3. 捕获 ValueError输出“评分必须是整数。”然后 return None。
# 4. 转换成功后,检查评分是否处于 0 到 100 之间。
# 5. 超出范围时输出“评分必须在 0 到 100 之间。”,然后 return None。
# 6. 合法时 return 转换后的整数,不要在函数内输出合法结果。
# 7. 分别传入 "90"、"优秀"、"120",预期返回 90、None、None。
# 第二部分:定义 calculate_average(total_score, agent_count) 函数
# 1. 在 try 中计算 total_score / agent_count。
# 2. 捕获 ZeroDivisionError输出“Agent 数量不能为 0。”并 return None。
# 3. 使用 else return 平均分。
# 4. 传入 180 和 2预期返回 90.0。
# 5. 传入 180 和 0预期返回 None程序不能崩溃。
# 第三部分:定义 read_score(file_path) 函数
# 1. 在 try 中使用 read_text(encoding="utf-8") 读取文本。
# 2. 调用 strip() 清理文本,再调用 parse_score() 并 return 结果。
# 3. 捕获 FileNotFoundError输出“没有找到评分文件。”并 return None。
# 4. 添加 finally并输出“评分文件读取结束。”。
# 5. 注意parse_score() 已经负责处理 ValueError不要重复捕获同一错误。
# 第四部分:定义 main() 函数
# 1. 使用 mkdir(parents=True, exist_ok=True) 创建 PRACTICE_DIR。
# 2. 使用 write_text() 把 "90\n" 写入 SCORE_FILE并指定 utf-8。
# 3. 调用 read_score(SCORE_FILE),把返回值保存为 saved_score。
# 4. saved_score 不是 None 时输出“读取到的评分90”。
# 5. 再调用 read_score(PRACTICE_DIR / "missing.txt") 测试文件不存在的分支。
# 6. 添加程序入口判断,直接运行本文件时调用 main()。
# 最终验收测试:
# 1. parse_score("0") 返回 0
# 2. parse_score("100") 返回 100
# 3. parse_score("优秀") 输出提示并返回 None
# 4. parse_score("-1") 和 parse_score("101") 均返回 None
# 5. calculate_average(180, 2) 返回 90.0
# 6. calculate_average(180, 0) 不崩溃并返回 None
# 7. 存在的评分文件可以正常读取;
# 8. 不存在的文件会输出提示finally 中的文字仍然出现;
# 9. 所有异常都捕获了明确类型,没有使用空白 except。
# 完成后自查:
# 1. try 中是否只放可能发生异常的代码;
# 2. 是否分别理解 ValueError、ZeroDivisionError 和 FileNotFoundError
# 3. 出现异常后,程序是否给出中文提示而不是直接崩溃;
# 4. 是否使用 return 返回结果,而不是只在函数中 print()
# 5. 是否理解 else 只在没有异常时执行;
# 6. 是否理解 finally 无论有无异常都会执行;
# 7. 是否没有使用 except Exception 隐藏所有问题;
# 8. 是否没有删除题目和验收说明。