课程大纲
课程大纲系列主页
学习进度已完成 0/19

W2 · Python 速成①

入门进行中Python2 天前更新

Phase 1 · 基础与安全前置 · 第 2 周。零基础的第一道坎。原则只有一条:只学做 Agent 用得上的 Python——每个语法点都用「自动化一台电脑」的场景来讲,不干巴巴背语法。学得够用就往下走,真缺了再补。

本周一句话

把变量、字符串、列表、字典、循环、判断、函数这几样够用的 Python 学会,并且全程用「自动化一台电脑」的场景来理解它们。

学完能做到

  • 看懂一段「打开 Excel、逐行读数据、逐个点过去」的代码在做什么。
  • 自己用变量 / 列表 / 字典 把一批要操作的坐标、文件名、配置组织起来。
  • 用 for + if 写出「遍历一批目标、满足条件才操作」的逻辑。
  • 把一段重复动作封装成函数,换个参数就能复用。

前置要求

  • W1 的沙箱能跑(建议直接在沙箱里练,环境和后面一致)。
  • 没有任何编程基础也能跟。

在哪写、怎么跑

建议直接在 W1 的沙箱里写,环境和后面一致。打开沙箱桌面的终端或编辑器,把第一行写进一个 hello.py 跑起来:

python
print("hello")

在终端里执行:

bash
python3 hello.py

打印出这一行,就说明你能写能跑了:

text
hello

写代码的地方:推荐在沙箱桌面打开 VS Code,新建文件存成 hello.py,再在终端 python3 hello.py 跑起来;嫌它重,也可以用终端里的 nano。和后面几周用的是同一套环境。

实战视频 · W2-1待录制

为什么只学这几样

Python 很大,但做 Agent 早期反复用到的就这几样。先学够用的,边学边做,真需要再补——别想着「先读完一本 Python 书」。装饰器、异步这些本周用不上,不提前焦虑。

变量、字符串、数字

变量就是「给一个值起名字,方便反复用」。字符串装文字(文件名、路径、要输入的内容),数字用来计数或算坐标。自动化里,文件名、要填的文字、窗口标题,全是字符串;坐标、循环次数、等待秒数,全是数字。

下面代码里 # 后面到行尾是注释——给人看的说明,程序会跳过、不执行,敲不敲都不影响运行。

python
app_name = "记事本"          # 字符串:要打开的程序名
wait_seconds = 2             # 数字:每步之间等几秒
greeting = "Hello, " + app_name   # 字符串拼接
print(greeting)

运行打印:

text
Hello, 记事本

易错:字符串要带引号,变量名不带;"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,所以循环体里能直接用 xy——这叫解包,比写 点[0]点[1] 顺手。

python
click_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 细讲,这周照抄这一行即可。

python
import 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(见「配套代码」)。

实战视频 · W2-2待录制

读代码:打开 Excel、逐行点过去

「学完能做到」第一条的自测。下面这段把本周所有零件用在一个常见场景上——打开 Excel,按一份名单逐行填数。以读懂为主、不要求跑(沙箱里没有 Excel,这类文档处理 W16 实战案例会真做);没学过的函数都注了释,能逐行说出每句在做什么,本周就算过关:

python
import 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), "个点")

运行:

bash
python3 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(本周语法速查)

python
import 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 教程的「函数 / 数据类型」部分(中文,讲得细)。
  • 本周用不上、别提前焦虑:装饰器、元类、异步、类型注解这些——用到了再学。
W2 · Python 速成① | 资讯狗 | Zixungou