第 8 章课后练习与答案
练习使用本章 examples 目录中的代码。先保留原文件,再复制一份完成修改。模型给出的文字不能填写成实际运行结果,必须在自己的终端执行以后记录。
🌈 关于《AI 零基础 36 讲》课后训练
📚与正式讲解配套学习
本篇是《AI 零基础 36 讲》的配套课后训练,与对应章节的正式讲解一起使用。整个系列面向初学者,从日常 AI
使用逐步进入编程、模型训练和大模型应用开发。✍️先独立作答,再核对答案
训练围绕本章知识安排概念判断、结果分析或动手任务,并提供参考答案与解释。建议先读完对应的正式文章,再独立作答;遇到困难时回看相关例子,最后核对答案。
💻代码题请亲手运行
观察程序输出,确认自己能解释结果、发现错误并完成修复。做完一道题,也要弄清答案为什么成立。
第一部分 解释原始代码
打开 calculator_before.py,写一条给 AI 的解释提示。提示需要说明你的基础,并要求它沿着 calculate(8, “-”, 2) 的执行顺序解释。
defcalculate(left,operator,right):ifoperator=="+":returnleft+rightifoperator=="-":returnleft-rightraiseValueError("不支持的运算符")if__name__=="__main__":print(calculate(8,"+",2))回答下面的问题。
- 哪个条件会成立
- 函数返回什么
- raise 在什么情况下执行
第二部分 缩小修改范围
现在要让计算器支持取余运算符。请写一条修改提示,要求保留函数签名、已有四种运算和异常消息,只增加百分号分支。
补充两个验收样例,其中一个是正常输入,另一个用于检查除数为零。
第三部分 整理调试材料
下面是一条不完整的求助。
代码报错了,帮我修一下。 ValueError请把它改成可复现的调试请求。至少包含运行环境、代码文件、启动命令、完整报错、输入、预期结果和最近改动。
第四部分 阅读 traceback
阅读 error-sample.txt,回答下面的问题。
- 异常类型是什么
- 哪一行执行了除法
- 哪一行把除数零传进函数
- 为什么只看最后一行不足以定位修改位置
第五部分 设计边界测试
为取余功能列出四个测试。至少包括一个正常整数、一个负数、除数为零和非法运算符。每项都写出输入与预期结果。
第六部分 运行前安全检查
假设 AI 给你的脚本新增了下面内容。
- 安装一个你没听说过的第三方包
- 读取整个用户目录
- 把结果发送到一个外部网址
- 删除处理完成的原文件
- 在代码中直接写入访问令牌
请说明运行前怎样处理。若没有足够信息确认安全,应当停在哪一步。
第七部分 亲自运行
在 examples 目录依次运行修改前程序、错误中间版、修复后程序与单元测试。记录命令、标准输出、错误输出和退出码。
如果你的 Python 路径与本章不同,请使用自己电脑上的路径,不要照抄本章的解释器位置。
参考答案
第一部分答案
calculate(8, “-”, 2) 会跳过加法条件,在减法条件处成立并返回 6。return 执行后函数结束,因此 raise 不会运行。只有支持的条件都不成立时,程序才执行 raise。
合格提示应要求围绕这次调用解释输入、条件判断和返回值。只问每个单词的定义,很难看见程序怎样流动。
第二部分答案
修改提示可以要求只在除法分支之后增加百分号分支,不改变函数名和三个参数,也不改现有错误消息。正常样例可以使用 calculate(8, “%”, 3),预期为 2。除数为零可以使用 calculate(8, “%”, 0),预期抛出消息清楚的 ValueError。
百分号同样存在除数为零问题。若只测正常样例,这个错误会被漏掉。
第三部分答案
调试请求要贴完整 traceback 和触发问题的最小代码,并写明 Python 版本、操作系统、运行目录与命令。输入值、预期结果和最近改动能帮助定位是环境、调用方式还是新代码引起的问题。密钥和私人数据需要删除或替换。
第四部分答案
异常类型是 ZeroDivisionError。第 9 行执行 left / right,第 14 行用 calculate(8, “/”, 0) 触发这条路径。最后一行只说明发生了除零,前面的调用位置才能告诉读者从哪里传入了零,以及代码在哪一行真正失败。
第五部分答案
可以使用 8 % 3 得到 2,负数样例要根据 Python 实际规则写预期并运行确认。8 % 0 应触发 ValueError,百分号以外的未知运算符仍应触发“不支持的运算符”。测试名称要能看出它检查哪种行为。
第六部分答案
先暂停运行。确认第三方包的正式来源、用途和版本,再看脚本为什么需要读取整个用户目录。外部网址、删除动作和访问令牌都需要单独审查,不能因为代码能运行就接受。
可以把测试范围缩到专门准备的目录,使用虚构数据并移除网络与删除动作。真实令牌不应写进代码或提示词。无法解释某项权限用途时,保持不运行并请项目负责人或安全人员检查。
第七部分答案
修改前输出 10,错误中间版触发 ZeroDivisionError 并以退出码 1 结束,修复版输出 4.0,六个单元测试全部通过。
你的记录必须来自自己的终端。若结果不同,保留完整输出并核对解释器版本、工作目录和文件内容。
如有不清晰的步骤可以向AI寻求帮助
自我检查
- 我会让 AI 沿具体输入解释代码
- 我能把修改限制在一个小功能
- 我会提供完整 traceback 和复现步骤
- 我能区分模型建议与真实运行结果
- 我会检查新依赖与高风险操作
- 我会测试正常功能和边界输入
- 我会保留命令、输出和退出码
七项都能做到,就可以进入第 9 章,正式安装 Python 与开发工具。