【零基础学AI】第 8 章——让 AI 辅助编程

第 8 章 让 AI 辅助编程

文章目录

AI 发来一段代码,不等于这段代码已经运行过。

回答里的"已经修复""测试通过"只能说明模型生成了这些文字。真正的证据来自你的电脑,文件要能保存,程序要能启动,测试命令要有输出,原有功能还得继续工作。对刚接触编程的人来说,这条分界很重要。

本章会走完一次小改动。我们先让 AI 解释一个只支持加减法的计算函数,再要求它加入乘除法。第一版修改会在除以零时失败,随后根据完整报错定位问题,补上检查并运行六个测试。示例使用 Python 3.12.2 和 Windows 11,代码只依赖 Python 标准库。

🌈 关于《AI 零基础 36 讲》

🧠 零基础也能开始学 AI

《AI 零基础 36 讲》是一套面向初学者的 AI 入门教程。课程从认识和使用 AI 开始,逐步学习

Python、数据处理、机器学习与深度学习,再进入大模型应用开发,最后完成个人知识库助手的综合实践。

📖 本篇是正式讲解文章

通过具体例子、原创图示和操作结果讲清概念。涉及编程的章节提供可运行代码,方便你边读边试。

🎯 读完以后,动手检验

建议按专栏顺序学习,并完成对应的课后训练,检查自己能否独立运用本章知识。

博客专栏:《AI 零基础 36 讲》

先让 AI 解释一段完整的小代码

刚开始学编程时,直接问"这段代码什么意思"容易得到一篇术语很多的说明。先把解释任务缩小,告诉模型你的水平,再要求它沿着一次实际运行说明数据怎样变化。

本章的原始程序保存在 calculator_before.py 中。

python 复制代码
def calculate(left, operator, right):
    if operator == "+":
        return left + right
    if operator == "-":
        return left - right
    raise ValueError("不支持的运算符")


if __name__ == "__main__":
    print(calculate(8, "+", 2))

可以这样提问。

text 复制代码
我是 Python 初学者。

请解释 calculate 函数的输入和输出,再按一次 calculate(8, "+", 2) 的运行顺序逐行说明。
遇到 if、return 和 raise 时解释它们在当前程序里做什么。
最后指出传入 "*" 会发生什么。
暂时不要改代码。

这样的解释有一条明确路线。数值 8、运算符加号和数值 2 进入函数,第一个条件成立,函数返回 10,后续分支不再执行。传入星号时,两个条件都不成立,程序执行 raise 并产生 ValueError。

逐行解释并不要求每个括号都讲一遍。解释应当说清输入从哪里进来,条件怎样选择分支,结果从哪里返回,错误在什么情况下出现。

把自然语言需求缩成一次小改动

现在想加入乘法和除法。只说"把计算器功能完善一下",模型可能顺手添加交互菜单、图形界面或第三方库。改动越大,初学者越难看出哪一行解决了当前问题。

更合适的任务可以写成下面这样。

text 复制代码
请修改 examples/calculator_before.py。

目标
让 calculate 函数支持 "*" 和 "/"。

保留
函数名称和三个参数不变。
现有加法、减法和非法运算符行为不变。

限制
只使用 Python 标准库。
先给出最小修改,不增加输入菜单。

验收
calculate(8, "*", 2) 返回 16。
calculate(8, "/", 2) 返回 4。
说明除数为 0 时程序会怎样。

文件路径、保留项和验收样例都写清以后,模型比较容易只动需要动的地方。OpenAI 介绍内部使用 Codex 的资料时也建议把任务写得像一个范围明确的问题,提供相关文件、组件和上下文。

第一版修改留下了一个错误

教学中的第一版建议稿保存在 calculator_buggy.py 中。新增部分如下。

python 复制代码
    if operator == "*":
        return left * right
    if operator == "/":
        return left / right

乘法与普通除法都能工作,除数为零的情况没有处理。先不要根据代码外观猜结果,直接运行。

powershell 复制代码
G:\Python\python.exe calculator_buggy.py

本项目在示例目录中实际运行后得到下面的 traceback,进程退出码为 1。

text 复制代码
Traceback (most recent call last):
  File "...calculator_buggy.py", line 14, in <module>
    print(calculate(8, "/", 0))
          ^^^^^^^^^^^^^^^^^^^^
  File "...calculator_buggy.py", line 9, in calculate
    return left / right
           ^^^^^^
ZeroDivisionError: division by zero

完整的原始记录保存在 error-sample.txt 中。Python 官方教程说明,异常信息最后一行会给出发生了什么,前面的 traceback 列出程序经过的位置。本例最后一行是 ZeroDivisionError,向上看可以找到第 9 行的除法表达式,以及第 14 行传入零的调用。

只把"division by zero"发给 AI,信息太少。调试提示应同时提供环境、运行命令、完整报错、预期结果和最近改动。

text 复制代码
运行环境
Windows 11
Python 3.12.2
没有第三方依赖

运行命令
G:\Python\python.exe calculator_buggy.py

预期
程序遇到除数 0 时给出清楚提示,不显示 traceback。

实际
粘贴完整 traceback

最近改动
刚为 calculate 函数加入 "*" 和 "/" 两个分支。

请先解释 traceback 中第 9 行和第 14 行的关系。
随后给出最小修复,并补一个能验证除零行为的测试。
不要修改现有加减法。

这类信息能让模型围绕已经出现的错误工作。运行环境不必写成长篇配置清单,先给解释器版本、操作系统、启动命令和依赖。涉及框架、数据库或浏览器时,再补相应版本与配置。

修复要和预期行为一起决定

发现除零以后,还要决定程序应该怎样响应。可以返回一段文本,也可以抛出一个更容易理解的异常。这个示例保留函数只负责计算的结构,在除数为零时抛出 ValueError。

最终版本保存在 calculator_after.py 中。

python 复制代码
    if operator == "/":
        if right == 0:
            raise ValueError("除数不能为 0")
        return left / right

这里先检查 right。数值为零时,函数用清楚的消息停止;其他数值继续做除法。修改范围只有除法分支,已有加减法和非法运算符处理没有改动。

程序主入口调用 calculate(8, "/", 2)。实际运行结果如下,退出码为 0。

text 复制代码
4.0

这个结果只证明普通除法能运行。加减法是否被碰坏,乘法是否正确,除零是否按约定处理,还要分别检查。

用测试覆盖正常输入和边界

本章的 test_calculator.py 使用 Python 标准库中的 unittest。Python 官方文档把测试用例描述为针对一组输入检查特定响应,并提供 assertEqual 与 assertRaises 等方法。

六个测试分别检查加法、减法、乘法、普通除法、除数为零和不支持的运算符。运行命令如下。

powershell 复制代码
G:\Python\python.exe -m unittest -v test_calculator.py

项目中的实际运行结果为六项全部通过。

text 复制代码
test_addition ... ok
test_division ... ok
test_division_by_zero ... ok
test_multiplication ... ok
test_subtraction ... ok
test_unsupported_operator ... ok

Ran 6 tests in 0.000s

OK

测试通过也有范围。这里检查的是几个明确输入,没有证明它能安全处理任意字符串、极大数字或外部文件。代码要放进真实项目时,还要根据输入来源和使用场景补充测试。

依赖、安全和边界要单独看

模型可能给出一个需要安装新包的方案。先查看 import 行和安装命令,确认包名、来源、版本与项目是否允许使用。一个十几行的小计算器没有理由为了四则运算增加第三方依赖。

运行陌生代码前,先读一遍它会碰什么。文件删除、批量改名、网络请求、数据库写入和系统命令都可能改变外部状态。把第一次运行放在测试目录或隔离环境中,准备好可恢复的数据。

代码里出现密码、访问令牌或私人数据时要停下来。不要把真实凭据贴给模型,也不要把模型生成的占位密码当成正式配置。涉及登录、权限、付款、文件上传和用户输入的代码,需要懂该系统的人做安全审查。

再看边界输入。本章的除数为零就是一项边界。空文本、负数、重复记录、超长输入和不存在的文件也常被漏掉。哪些边界值得测试,要由程序真实接收的数据决定,不能照着清单机械添加。

初学者可以照着走的顺序

  1. 保存原始文件,先亲自运行一次。
  2. 让 AI 解释输入、输出和一次具体调用的执行顺序。
  3. 把需求限制成一个小功能,写明哪些地方不能改。
  4. 让模型给出修改建议和验收样例。
  5. 阅读差异,检查依赖与可能改变外部状态的代码。
  6. 在自己的环境中运行,完整保留命令、输出和退出码。
  7. 出错时提供环境、复现步骤、完整 traceback 与预期结果。
  8. 修复后重跑原功能、当前功能和容易失败的边界。
  9. 只有人工审查与实际验证都通过,才把代码并入正式项目。

AI 可以解释陌生语法,也能很快写出一个候选修改。运行记录决定它有没有做成。下一章会从头安装 Python 和开发工具,把本章出现的解释器、终端与脚本文件放到同一套环境中。

【零基础学AI】第 8 章课后练习与答案

关键资料

相关推荐
木卫二号Coding1 小时前
第八十六篇-Strata 部署指南(Ubuntu 22.04 + Tesla V100【单卡】)
linux·运维·人工智能·ubuntu
zpjing~.~1 小时前
Vim 高效批量替换实战:从 /dev/ 替换为 /dev-ai/
人工智能·编辑器·vim
图特摩斯科技1 小时前
2026年语义模型、本体和知识图谱面试题自出30道
人工智能·知识图谱·abutiongraph·palantir·ontology·ontoflow
Guarding and trust1 小时前
项目拆解(二):模型输出是‘野‘的——三层兜底+重分析,把AI变成可靠零件
java·人工智能·python·大模型·fastapi·ollama·错误兜底
速易达网络1 小时前
常见AI 模型格式种类
人工智能·具身智能
for_ever_love__1 小时前
LangChain MultiVectorRetriever:一个文档存多个向量
人工智能·python·自然语言处理·langchain·ai大模型·多向量·摘要检索
XMAIPC_Robot1 小时前
国产FPGA替代Xilinx在储能电力采集场景可行性评估与移植经验
人工智能·算法·机器学习·fpga开发·rk3588+fpga
loulanyue_2 小时前
从视觉感知到具身世界模型:物理世界中的自我进化智能体——读普林斯顿刘世隆NICE Workshop演讲
人工智能·深度学习
阿里云大数据AI技术2 小时前
在 EMR Serverless Spark 的 Ray 作业中使用 Checkpoint 断点续跑
人工智能·spark