第 10 章:写代码
学会让 AI 编写代码
第 10 章:写代码 ⭐
本章解决什么问题:学会让 AI 编写代码
学习目标:能够用自然语言让 AI 编写函数、创建文件、遵循代码规范
版本基准:OpenClaw 3.13 前置条件:已完成第 9 章(PDF 处理)
📋 实测验证说明:本章所有代码示例均经过实测验证,确保代码可正确运行。
10.1 编写简单函数
让 AI 帮你编写代码,快速实现功能。
基本用法
在 Telegram 中发送:
写一个 Python 函数,计算两个数的和
AI 回复(实测):
好的,已创建 add.py 文件:
```python
def add(a, b):
"""计算两个数的和"""
return a + b
# 测试
if __name__ == "__main__":
print(add(3, 5)) # 输出:8
文件已保存到当前目录。需要我帮你运行测试吗?
> **🔍 实测说明**:实测时间 2026-03-20,AI 调用 write 工具创建文件
> **💡 新手建议**:描述代码功能时尽量具体,包括语言、输入输出、特殊要求等。
---
## 10.2 不同场景的代码编写
### 场景一:编写工具函数
**发送**:
写一个 JavaScript 函数,判断一个数是否为偶数
**AI 回复**(实测):
好的,已创建 is-even.js 文件:
/**
* 判断一个数是否为偶数
* @param {number} num - 要判断的数字
* @returns {boolean} - 如果是偶数返回 true,否则返回 false
*/
function isEven(num) {
return num % 2 === 0;
}
// 测试
console.log(isEven(4)); // true
console.log(isEven(7)); // false
文件已保存。需要添加更多测试用例吗?
### 场景二:编写数据处理代码
**发送**:
写一个 Python 脚本,读取 CSV 文件并统计每列的平均值
**AI 回复**(实测):
好的,已创建 csv_stats.py 文件:
import csv
def calculate_averages(filename):
"""读取 CSV 文件并计算每列的平均值"""
with open(filename, 'r', encoding='utf-8') as f:
reader = csv.reader(f)
headers = next(reader)
# 初始化每列的总和和计数
sums = [0] * len(headers)
counts = [0] * len(headers)
# 读取数据
for row in reader:
for i, value in enumerate(row):
try:
sums[i] += float(value)
counts[i] += 1
except ValueError:
pass # 跳过非数字值
# 计算平均值
averages = []
for i in range(len(headers)):
if counts[i] > 0:
avg = sums[i] / counts[i]
averages.append(f"{headers[i]}: {avg:.2f}")
else:
averages.append(f"{headers[i]}: N/A")
return averages
# 使用示例
if __name__ == "__main__":
results = calculate_averages('data.csv')
for result in results:
print(result)
文件已保存。使用示例:
python csv_stats.py
需要我帮你创建测试数据吗?
### 场景三:编写 API 调用代码
**发送**:
写一个 Node.js 脚本,调用 GitHub API 获取用户信息
**AI 回复**(实测):
好的,已创建 github-user.js 文件:
const https = require('https');
/**
* 获取 GitHub 用户信息
* @param {string} username - GitHub 用户名
*/
function getUserInfo(username) {
const options = {
hostname: 'api.github.com',
path: `/users/${username}`,
method: 'GET',
headers: {
'User-Agent': 'Node.js',
'Accept': 'application/vnd.github.v3+json'
}
};
https.get(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
const user = JSON.parse(data);
console.log(`用户名:${user.login}`);
console.log(`姓名:${user.name || '未设置'}`);
console.log(`仓库数:${user.public_repos}`);
console.log(`关注者:${user.followers}`);
});
}).on('error', (err) => {
console.error('请求失败:', err.message);
});
}
// 使用示例
getUserInfo('openclaw');
文件已保存。运行方式:
node github-user.js
需要我帮你添加错误处理或更多功能吗?
### 场景四:编写完整项目
**发送**:
创建一个简单的 Express 服务器,有首页和 API 接口
**AI 回复**(实测):
好的,创建 Express 项目结构:
已创建文件:
- package.json
{
"name": "simple-express-app",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.18.0"
}
}
- server.js
const express = require('express');
const app = express();
const PORT = 3000;
// 首页
app.get('/', (req, res) => {
res.send('<h1>欢迎访问!</h1><p>这是一个简单的 Express 服务器</p>');
});
// API 接口
app.get('/api/hello', (req, res) => {
res.json({ message: 'Hello, World!' });
});
app.get('/api/time', (req, res) => {
res.json({ time: new Date().toISOString() });
});
// 启动服务器
app.listen(PORT, () => {
console.log(`服务器运行在 http://localhost:${PORT}`);
});
运行步骤:
npm install
npm start
然后访问:
需要我帮你添加更多功能吗?
---
## 10.3 高级用法
### 指定代码规范
**发送**:
写一个 Python 函数,使用 Type Hints,遵循 PEP 8 规范
**AI 回复**(实测):
好的,已创建 typed_function.py 文件:
from typing import List, Optional
def greet(name: str, greeting: Optional[str] = None) -> str:
"""
生成问候语。
Args:
name: 被问候人的姓名
greeting: 问候语,默认为 "Hello"
Returns:
完整的问候语字符串
"""
if greeting is None:
greeting = "Hello"
return f"{greeting}, {name}!"
def calculate_sum(numbers: List[int]) -> int:
"""
计算数字列表的总和。
Args:
numbers: 整数列表
Returns:
所有数字的总和
"""
return sum(numbers)
if __name__ == "__main__":
print(greet("Alice")) # Hello, Alice!
print(greet("Bob", "Hi")) # Hi, Bob!
print(calculate_sum([1, 2, 3, 4, 5])) # 15
文件已保存,代码遵循 PEP 8 规范,包含 Type Hints 和文档字符串。
### 添加单元测试
**发送**:
写一个计算器类,包含加减乘除,并添加单元测试
**AI 回复**(实测):
好的,创建计算器和测试文件:
1. calculator.py
class Calculator:
"""简单的计算器类"""
def add(self, a: float, b: float) -> float:
"""加法"""
return a + b
def subtract(self, a: float, b: float) -> float:
"""减法"""
return a - b
def multiply(self, a: float, b: float) -> float:
"""乘法"""
return a * b
def divide(self, a: float, b: float) -> float:
"""除法"""
if b == 0:
raise ValueError("除数不能为零")
return a / b
2. test_calculator.py
import unittest
from calculator import Calculator
class TestCalculator(unittest.TestCase):
"""计算器测试类"""
def setUp(self):
self.calc = Calculator()
def test_add(self):
self.assertEqual(self.calc.add(2, 3), 5)
def test_subtract(self):
self.assertEqual(self.calc.subtract(5, 3), 2)
def test_multiply(self):
self.assertEqual(self.calc.multiply(4, 3), 12)
def test_divide(self):
self.assertEqual(self.calc.divide(10, 2), 5)
def test_divide_by_zero(self):
with self.assertRaises(ValueError):
self.calc.divide(10, 0)
if __name__ == "__main__":
unittest.main()
运行测试:
python -m unittest test_calculator.py
需要我帮你运行测试吗?
---
## 10.4 练习时间
### 练习 1:编写函数
**发送**:
写一个 Python 函数,判断一个字符串是否是回文
观察 AI 如何编写代码。
### 练习 2:编写脚本
**发送**:
写一个 Node.js 脚本,读取当前目录的所有文件并列出文件名
练习让 AI 编写实用脚本。
### 练习 3:添加测试
**发送**:
给我刚才创建的回文函数添加单元测试
练习让 AI 编写测试代码。
---
## 10.5 常见问题
### Q1:AI 支持哪些编程语言?
**支持的语言**:
- ✅ Python、JavaScript、TypeScript
- ✅ Java、C++、C#
- ✅ Go、Rust、Ruby
- ✅ PHP、Swift、Kotlin
- ✅ HTML、CSS、SQL
- 以及大多数主流编程语言
### Q2:AI 写的代码可靠吗?
**说明**:
- AI 生成的代码通常可以运行
- 但建议 review 后再使用
- 复杂逻辑需要人工验证
### Q3:AI 能理解现有代码吗?
**说明**:
- 可以读取并理解代码
- 可以解释代码功能
- 可以提出改进建议
### Q4:AI 能帮我调试代码吗?
**说明**:
- 可以分析错误信息
- 可以定位问题
- 可以提供修复建议
---
## ✅ 你已解锁能力
| 能力 | 状态 |
|------|------|
| 让 AI 编写函数 | ✅ 已掌握 |
| 让 AI 编写脚本 | ✅ 已掌握 |
| 让 AI 创建项目 | ✅ 已掌握 |
| 让 AI 添加测试 | ✅ 已掌握 |
---
## 📊 自测题(3 题)
### 1. 如何让 AI 遵循特定代码规范?
**答案**:在请求中说明,如"使用 Type Hints,遵循 PEP 8 规范"
### 2. AI 支持哪些编程语言?
**答案**:大多数主流编程语言,包括 Python、JavaScript、Java 等
### 3. 如何让 AI 为代码添加测试?
**答案**:在请求中说明"并添加单元测试"
---
## 🎯 下一章预告
第 11 章:改代码
你将学会:
- 让 AI 重构代码
- 让 AI 优化性能
- 让 AI 修复 bug
**提前试试**:
优化这个函数的性能(发送一段代码)
> 本文由郭峰主导,基于 GPT-5.4、OpenClaw Agent 完成,并经人工审校定稿。
---
> **课后练习**(可选)
> 1. 让 AI 编写一个实用函数
> 2. 让 AI 编写一个完整脚本
> 3. 让 AI 为代码添加测试
>
> 有任何问题,随时在群里提问! 🚀