课程大纲
W2 · Python 速成①
Phase 1 · 基础与安全前置 · 第 2 周。零基础的第一道坎。原则只有一条:只学做 Agent 用得上的 Python——每个语法点都用「自动化一台电脑」的场景来讲,不干巴巴背语法。学得够用就往下走,真缺了再补。
本周一句话
把变量、字符串、列表、字典、循环、判断、函数这几样够用的 Python 学会,并且全程用「自动化一台电脑」的场景来理解它们。
学完能做到
- 看懂一段「打开 Excel、逐行读数据、逐个点过去」的代码在做什么。
- 自己用变量 / 列表 / 字典 把一批要操作的坐标、文件名、配置组织起来。
- 用 for + if 写出「遍历一批目标、满足条件才操作」的逻辑。
- 把一段重复动作封装成函数,换个参数就能复用。
前置要求
- W1 的沙箱能跑(建议直接在沙箱里练,环境和后面一致)。
- 没有任何编程基础也能跟。
在哪写、怎么跑
建议直接在 W1 的沙箱里写,环境和后面一致。打开沙箱桌面的终端或编辑器,把第一行写进一个 hello.py 跑起来:
pythonprint("hello")
在终端里执行:
bashpython3 hello.py
打印出这一行,就说明你能写能跑了:
texthello
写代码的地方:推荐在沙箱桌面打开 VS Code,新建文件存成 hello.py,再在终端 python3 hello.py 跑起来;嫌它重,也可以用终端里的 nano。和后面几周用的是同一套环境。
为什么只学这几样
Python 很大,但做 Agent 早期反复用到的就这几样。先学够用的,边学边做,真需要再补——别想着「先读完一本 Python 书」。装饰器、异步这些本周用不上,不提前焦虑。
变量、字符串、数字
变量就是「给一个值起名字,方便反复用」。字符串装文字(文件名、路径、要输入的内容),数字用来计数或算坐标。自动化里,文件名、要填的文字、窗口标题,全是字符串;坐标、循环次数、等待秒数,全是数字。
下面代码里 # 后面到行尾是注释——给人看的说明,程序会跳过、不执行,敲不敲都不影响运行。
pythonapp_name = "记事本" # 字符串:要打开的程序名 wait_seconds = 2 # 数字:每步之间等几秒 greeting = "Hello, " + app_name # 字符串拼接 print(greeting)
运行打印:
textHello, 记事本
易错:字符串要带引号,变量名不带;"2"(字符串)和 2(数字)不是一回事。
列表、字典
列表 = 一排有顺序的东西(一批坐标、一批文件名);字典 = 带标签的一组值(一份配置:用户名、密码、超时)。要让 Agent 把一批目标挨个处理,先把它们装进列表;要描述一个对象的多个属性,用字典。
python# 列表:屏幕上要依次点击的几个坐标 click_points = [(200, 300), (450, 300), (700, 300)] # 字典:一份任务配置 task = {"name": "导出报表", "retry": 3, "timeout": 30} print(task["name"], "最多重试", task["retry"], "次")
运行打印:
text导出报表 最多重试 3 次
每个 (200, 300) 外面是圆括号,叫元组(tuple)——和列表很像,但通常装「固定搭配的一组值」,比如一个坐标的 x、y。坐标这几个数字本周先任取几个固定值写死、能看到鼠标动起来就行;怎么对准真实按钮、拿到精确坐标,是后面 W3 / W4 用截图找图来教的,现在不用纠结。
(print 里用逗号隔开多个值,会自动加空格、数字和文字混着放都行;+ 只能拼字符串。想知道列表里有几个元素,用 len(click_points),这里是 3。)
易错:列表用 []、元组用 ()、字典用 {};列表 / 元组取下标从 0 开始,字典按 key 取值。
for / if / else
for 把列表里的东西挨个拿出来处理;if / else 让程序看情况办事。这两样合起来就是自动化的骨架——遍历一批目标、满足条件才动手。
for x, y in click_points 这行得单独说一句。列表里每个元素是一个 (x, y) 元组,写成 for x, y 会把元组里的两个值一次拆开、左边给 x、右边给 y,所以循环体里能直接用 x、y——这叫解包,比写 点[0]、点[1] 顺手。
pythonclick_points = [(200, 300), (450, 300), (700, 300)] for x, y in click_points: # 挨个取出坐标 if x < 500: # 看情况办事 print("点左半边:", x, y) else: print("点右半边:", x, y)
运行打印:
text点左半边: 200 300 点左半边: 450 300 点右半边: 700 300
函数:封装一个动作
把一段重复动作起个名字、留几个参数,下次换参数就能复用。Agent 的每个「能力」最后都是一个个函数。
开头的 import 是把别人写好的工具(这里是 pyautogui 和 time)拿进来用,下周 W3 细讲,这周照抄这一行即可。
pythonimport pyautogui, time def click_at(x, y, duration=0.5): # 封装「点某个坐标」 pyautogui.moveTo(x, y, duration=duration) # duration=鼠标移过去花多久 pyautogui.click() points = [(200, 300), (450, 300)] for x, y in points: click_at(x, y) # 复用 time.sleep(1)
这段在沙箱桌面里跑,程序会驱动鼠标移到每个坐标、各点一下——「数据 + 循环 + 函数」第一次驱动真实操作。(webtop 看不到那个系统箭头自己滑是正常的;想看到滑动,另开终端跑 python3 show_cursor.py & 配个红点替身。)
串起来:本周小脚本
把「一批坐标(列表)+ 逐个处理(for)+ 条件(if)+ 封装动作(函数)」拼成一个能在沙箱里跑的完整脚本,就是本周的收尾产出 w2_demo.py(见「配套代码」)。
读代码:打开 Excel、逐行点过去
「学完能做到」第一条的自测。下面这段把本周所有零件用在一个常见场景上——打开 Excel,按一份名单逐行填数。以读懂为主、不要求跑(沙箱里没有 Excel,这类文档处理 W16 实战案例会真做);没学过的函数都注了释,能逐行说出每句在做什么,本周就算过关:
pythonimport pyautogui, time rows = [ # 列表:要处理的一批数据 {"name": "张三", "amount": 120}, # 每个元素是一个字典 {"name": "李四", "amount": 80}, ] excel_icon = (60, 120) # 元组:桌面上 Excel 图标的坐标(示意值) first_cell = (300, 200) # 元组:第一行单元格的坐标(示意值) pyautogui.doubleClick(excel_icon) # doubleClick():双击,打开 Excel time.sleep(5) # 等它启动完 y = first_cell[1] # 元组取下标 1,拿到纵坐标 200 for row in rows: # for:逐行处理 pyautogui.click(first_cell[0], y) # 点中这一行的单元格 pyautogui.write(str(row["amount"])) # 字典按 key 取值;str() 把数字转成文字才能输入 y = y + 30 # 下一行往下挪 30 像素 print("填完", len(rows), "行")
读的时候照这几个问题过:rows 是什么结构(列表里装字典)?for 在遍历什么?y 为什么每圈加 30?这几问都答得上,「打开 Excel、逐行点过去」这类代码你就读得动了。
配套代码 / 模板
下面这些文件都可以从配套代码仓库直接下载,别手敲复制:https://github.com/codesfly/cua_class_code/tree/main/W02
w2_demo.py(在 W1 沙箱桌面的终端里跑)
依赖 W1 已装的 pyautogui。
python# w2_demo.py —— 用「数据 + 循环 + 判断 + 函数」驱动鼠标 # webtop 看不到那个系统箭头自己滑是正常的——看终端打印的坐标在变就知道鼠标真被挪了 # 想看到滑动:另开终端先跑 python3 show_cursor.py & (W1 配套,红点替身跟着指针滑) import pyautogui, time pyautogui.FAILSAFE = True # 鼠标快速移到左上角可紧急中止 def click_at(x, y, duration=0.5): """移到 (x, y) 再点一下""" pyautogui.moveTo(x, y, duration=duration) pyautogui.click() # 一批要依次点击的坐标(列表) click_points = [(200, 300), (450, 300), (700, 300)] time.sleep(2) # 留 2 秒切到沙箱桌面 for x, y in click_points: # 逐个取出 if x < 500: # 看情况办事 print("点左半边:", x, y) else: print("点右半边:", x, y) click_at(x, y) # 复用封装好的动作 print(" 指针现在在:", pyautogui.position()) # 坐标在变 = 鼠标真被程序挪了 time.sleep(1) print("跑完了,一共点了", len(click_points), "个点")
运行:
bashpython3 w2_demo.py
终端打印如下(鼠标在桌面上挨个移动、点击;webtop 看不到箭头自己滑正常,看坐标在变就知道真动了):
text点左半边: 200 300 指针现在在: Point(x=200, y=300) 点左半边: 450 300 指针现在在: Point(x=450, y=300) 点右半边: 700 300 指针现在在: Point(x=700, y=300) 跑完了,一共点了 3 个点
show_cursor.py(想看到鼠标滑动时另开终端先跑)
webtop 不画程序移动的系统光标,想看到鼠标滑动,跑 demo 前另开终端 python3 show_cursor.py &,会有个红点替身跟着指针滑(同 W1 那份,pkill -f show_cursor.py 关掉)。
w2_cheatsheet.md(本周语法速查)
pythonimport pyautogui # 变量 / 字符串 / 数字 app_name = "记事本" # 字符串带引号 wait = 2 # 数字不带引号 greeting = "Hi, " + app_name # 字符串用 + 拼接 # 列表:一排有顺序的东西,下标从 0 开始 pts = [(200, 300), (450, 300)] print(pts[0]) # (200, 300) print(len(pts)) # 2 —— 列表里有几个 # 元组:固定搭配的一组值,用 (),坐标就是元组 point = (200, 300) print(point[0], point[1]) # 200 300 # 字典:带标签的一组值,按 key 取 task = {"name": "导出", "retry": 3} print(task["name"]) # 导出 # for + 解包:每个元素是 (x, y) 元组,一次拆给 x、y for x, y in pts: print(x, y) # if / else:看情况办事 if wait > 1: print("等久一点") else: print("很快") # 函数:封装一段动作,换参数复用 def click_at(x, y, duration=0.5): pyautogui.moveTo(x, y, duration=duration) pyautogui.click()
本周作业
-
作业 1(必做):下面是一个写好框架、留空待补的脚本。补全
click_at函数体和 for 循环,让鼠标在沙箱里按列表逐个点过去。python# 作业1:补全 TODO 两处 import pyautogui, time pyautogui.FAILSAFE = True click_points = [(300, 200), (300, 400), (300, 600)] def click_at(x, y, duration=0.5): # TODO: 移到 (x, y) 再点一下(用 pyautogui.moveTo(x, y, duration=duration),再 pyautogui.click()) pass time.sleep(2) # TODO: 用 for 遍历 click_points,对每个坐标调用 click_at验收:脚本能跑,终端按列表顺序逐个打印坐标(坐标在变=鼠标真被挪了;看不到箭头滑正常)。
-
作业 2(理解):用一个字典描述「你想自动化的一个任务」的配置(至少 3 个 key),并说清每个 key 是做什么的。验收:≥3 个 key,至少包含一个数字 value 和一个字符串 value,每个 key 配一句中文说明。
常见坑
- 缩进报错(
IndentationError):Python 靠缩进分层,for / if 下面要缩进;统一用 4 个空格,别和 Tab 混用。 NameError:变量名拼错,或没先赋值就用。IndexError/KeyError:列表下标越界 / 字典取了不存在的 key。- 改了代码没生效:没保存,或跑的是旧文件。
- 在哪写代码:建议就在 W1 沙箱里写(推荐 VS Code,也可用
nano),和后面环境一致。
本周产出物
- 一个能在沙箱里跑的小脚本(
w2_demo.py):用列表 + for + if + 函数,驱动鼠标按数据逐个操作。 - 能读懂一段「打开 Excel、逐行点过去」的代码(见「读代码」一节,自测)。
- 一份自己的语法速查笔记。
延伸阅读
- 强烈推荐:《Automate the Boring Stuff with Python》(automatetheboringstuff.com,免费在线)——作者正是 pyautogui 的作者 Al Sweigart,全书就是「用 Python 自动化日常」,和本课调性一致,前几章对应本周内容。
- 必看:Python 官方教程(docs.python.org/zh-cn/3/tutorial)第 3–5 章(数字字符串、列表、流程控制、函数),查语法用。
- 想深入:廖雪峰 Python 教程的「函数 / 数据类型」部分(中文,讲得细)。
- 本周用不上、别提前焦虑:装饰器、元类、异步、类型注解这些——用到了再学。