上一节知道了 Python 是什么;本节解决"在哪儿写、怎么跑、跑错了怎么看"。 学完你会有三种开发方式(交互模式试算、编辑器写文件、命令行跑脚本),并想清一个本课特有的问题:这台机器是无头连着 SSH 的,那我到底在哪儿写代码?
本节把前面几件学过的东西串起来用:3-5 学的命令行(跑脚本)、3-3 学的"程序与软件包"(Thonny 是怎么装上的)、3-6 学的传文件(无头模式下把代码送到树莓派)。 上一节 6-1 是在命令行里"聊两句";本节开始,代码要落到文件里——这是从"玩"到"做"的分界线。 读法建议:三种方式都亲手试一遍(一共不到 5 分钟),别只看——手感是练出来的,不是看出来的。
一、先分清三种"写代码"的地方
新手最容易糊涂的地方:同样一句 print("你好"),为什么有的地方敲完立刻出结果,有的地方必须先保存?
因为它们是三个不同的地方:
| 方式 | 长什么样 | 什么时候用 | 能存下来吗 |
|---|---|---|---|
| ① 交互模式(REPL) | 提示符是 >>>,敲一行答一行 |
试算、验证一个小想法 | 不能,关掉就没了 |
| ② 脚本文件 | 一个 hello.py 文件 |
正经程序都在这儿写 | 能,就是文件 |
| ③ 编辑器 / IDE | 一个带菜单和按钮的窗口 | 写脚本文件(只是更好用的工具) | 能 |
①是草稿纸,②是作业本,③是更好的笔。 交互模式 不是"简化版",它是"不同用途"——就算你已经是老手,也天天用它验一句话的写法。
REPL 这个词:Read(读你一行)→ Eval(算)→ Print(打印结果)→ Loop(回去等下一行)。这四步循环,就是它名字的来历。
二、方式一:交互模式(最快的试验场)
上一节你已经进过了,这里补两个实用技巧。
进法:终端里敲 python3,提示符变成 >>>。退出:敲 exit() 或按 Ctrl + D。
技巧 1:它自带计算器
>>> 128 * 4
512
>>> 2 ** 10
1024
>>> 1.5 + 2.25
3.75
技巧 2:上一次的结果存在 _ 里
>>> 100 * 3
300
>>> _ + 50
350
在交互模式里,下划线 _ 自动保存"上一次算出来的结果"。
这在一步步试算的时候很省事(比如先算出总数,再拿它除以天数)。但注意:这个特性只在交互模式里有,写进 .py 文件里是没用的。
交互模式的短板(所以它只能当草稿纸):
- 不能保存——关掉窗口全没了;
- 一次只能一行——想跑个循环、写个函数很别扭;
- 不能传给别人。
三、方式二:脚本文件(正经的写法)
3.1 先建一个放代码的目录
别把代码随手扔在家目录里。给它一个专门的窝(目录怎么建见 Linux 的常用指令):
mkdir -p ~/projects
cd ~/projects
~ 是你的家目录(/home/你的用户名),-p 表示"要建几层就建几层,已有也不报错"。
3.2 写文件
最朴素的办法:命令行编辑器 nano(3-5 学过,无头模式下最方便):
nano hello.py
进去后打这几行:
print("你好,树莓派!")
print("这是我写的第一个 Python 程序。")
保存退出:Ctrl + O → 回车(确认文件名)→ Ctrl + X。
.py 不是给 Python 看的(Python 不看后缀也能跑),而是给编辑器、给你自己、给别人看的——它表示"这是个 Python 文件",编辑器才会给你语法高亮。
忘了写后缀,编辑器当它是普通文本,你会得到一片黑白。
3.3 跑它
python3 hello.py
输出:
你好,树莓派!
这是我写的第一个 Python 程序。
看到什么算成功:两行中文一字不差地打印出来,中间没有 SyntaxError。
3.4 让脚本能"直接跑"(进阶一点点,但很值)
现在每次跑都要写 python3。也可以让它像命令一样直接执行:
# ① 在文件第一行加一句"我是谁"
nano hello.py
在第一行(必须是第一行)加上:
#!/usr/bin/env python3
print("你好,树莓派!")
# ② 给它"可执行"权限(权限怎么算见 4-3)
chmod +x hello.py
# ③ 直接跑
./hello.py
它叫 shebang(读作"西-邦")。它的作用是告诉 Linux:"这个文件请用哪个程序来执行"。
#!/usr/bin/env python3 的意思是"帮我找环境里那个 python3,用它来跑"。
用 env 而不是写死 /usr/bin/python3,是因为不同系统上 python3 的位置可能不一样——env 会自己去找。这是个老练的写法。
四、方式三:用编辑器 / IDE 写(推荐 Thonny)
命令行写代码能跑,但没有语法高亮、没有补全、没有一键运行。所以在这个桌面上,官方给你准备了一个专门的工具。
4.1 Thonny:树莓派官方预装的 Python 编辑器
好消息:不用装。 Raspberry Pi OS 的桌面版和完整版都自带 Thonny(只有 Lite 版没有——因为它压根没桌面)。
打开方式:点左上角的树莓派菜单 → 编程(Programming) → Thonny。
界面就三块,很好认:
| 区域 | 位置 | 干什么 |
|---|---|---|
| 代码区 | 上面一大块 | 写代码的地方(一个文件一个标签页) |
| Shell | 下面一块 | 显示运行结果、也能当交互模式用(对,它内置了一个 >>>) |
| 变量区 | 右侧(可能默认收起) | 看每个变量的当前值——这是 Thonny 对新手的最大帮助 |
基本操作四步:
- 写:在代码区打字(自带语法高亮和自动缩进对齐)
- 存:
Ctrl+S(或 文件 → 保存),存成hello.py - 跑:
F5(或那个绿色播放按钮) - 看:结果显示在下面的 Shell 里
① 它自带 Python 解释器——不用你去配"用哪个 Python",开箱就用系统这个。 ② 它有单步调试:点"步进"按钮可以一行一行执行,同时右边变量区实时显示每个变量变成了什么。 这两个特性加起来,就是"让程序的内部过程看得见"——这是初学者最缺的东西。
4.2 其他编辑器(知道有这回事就行)
| 工具 | 特点 | 装法 |
|---|---|---|
| Geany | 轻量、支持多语言(C、C++、Java 也能写) | 桌面/完整版预装,或 sudo apt install geany |
| Mu Editor | 另一个面向初学者的 Python 编辑器 | sudo apt install mu-editor |
| nano / vim | 命令行编辑器,无头模式的唯一选择 | 系统自带 |
| VS Code | 功能最强,但吃内存(建议 4GB 以上机型) | sudo apt install code |
怎么选:本课就用 Thonny——它是为"学 Python"专门设计的,别人没有它那两个教学特性。
4.3 ⚠️ 本课特有情况:无头模式下在哪儿写
本课的环境约定是树莓派真机 + Windows + SSH 无头连接(见 2-3 与 3-6)。没有接显示器,Thonny 就没法在树莓派上开——它是个图形程序。
那你怎么办?两条路,都行:
路线 A:就在树莓派上用命令行写(最省事,也是最适合本课的)
nano ~/projects/hello.py # 写
python3 ~/projects/hello.py # 跑
nano 只学三个键就够用:Ctrl + O 保存、Ctrl + X 退出、Ctrl + W 搜索。
路线 B:在 Windows 上写,传过去跑(代码长的时候更舒服)
- 写:Windows 上任何编辑器都行(记事本也能,但建议 Notepad++ 之类带高亮的)
- 传:用 3-6 学的 SFTP(FileZilla 拖过去)或
scp:
# 在 Windows 的 PowerShell / cmd 里执行
scp hello.py 用户名@树莓派IP:~/projects/
- 跑:SSH 登上去
python3 ~/projects/hello.py
Windows 和 Linux 的"换行符"不一样,Windows 写出来的文件可能带着 \r(回车),Linux 有时会因此报奇怪的错。
判断办法:如果报错里出现 '\r' 或提示 bad interpreter,就是这个原因。
两个解法:① 在 Windows 编辑器里把换行符设成 LF(Notepad++ 右下角能改);② 传过去后在树莓派上转一遍:
sed -i 's/\r$//' hello.py
Thonny 也能当"远程编辑器":在 Windows 电脑上装一个 Thonny,把解释器设成树莓派上的(运行 → 选择解释器 → Remote Python 3 (SSH)),就能在 Windows 的图形界面里写、直接在树莓派上跑。 这是最舒服的方案,但配置稍多(要填 IP 和用户名),本课先用手感最简单的路线 A,等你觉得 nano 不够用了再回来试它。
五、代码写长了怎么办:两个保命习惯
习惯一:写之前先用 --version 之外的另一种方式检查语法
Python 是解释型,语法错误要跑到那一行才发现。所以有一个提前体检的命令:
python3 -m py_compile hello.py
没输出 = 语法没问题;有输出就是语法错误。长脚本改完先跑一遍这个,比直接运行更快找到"手滑"。
习惯二:别一次写 100 行
Python 一行报错的定位很准(会告诉你第几行),但前提是你只改了几行。 一次写太多,报错时你根本不知道是哪一次改动引入的。写完 5~10 行就跑一次——这叫"小步前进",是本课程后面所有硬件实验的默认打法。
六、动手 Demo:走完三种方式
第 1 步 · 交互模式试算
python3
>>> 7 * 6
42
>>> 2 ** 8
256
>>> exit()
第 2 步 · 写一个文件
mkdir -p ~/projects
cd ~/projects
nano hello.py
内容:
print("你好,树莓派!")
print("这是我写的第一个 Python 程序。")
Ctrl + O 回车,Ctrl + X 退出。
第 3 步 · 跑它,并让它在最后打印一行"谁在跑我"
python3 hello.py
再试一次,这次直接看 Python 路径:
python3 -c "import sys; print(sys.executable)"
第 4 步 · 故意写错,看报错长什么样(这一步最重要)
nano broken.py
里面故意把第二行的 print 打成 pritn:
print("第一行是好的")
pritn("第二行函数名打错了")
跑:
python3 broken.py
你会看到:
第一行是好的
Traceback (most recent call last):
File "/home/你的用户名/projects/broken.py", line 2, in <module>
pritn("第二行函数名打错了")
^^^^^
NameError: name 'pritn' is not defined. Did you mean: 'print'?
这里有三个信息量很大的点:
- 第一行打印出来了,第二行才报错——这就是"解释型"最直白的证据:它一行行往下跑,跑到坏的那行才发现问题(编译型的 C++ 会在编译阶段就把所有错挑出来,一行都跑不了)。
line 2和^^^^^直接指出错在哪。- 最后那句
Did you mean: 'print'?是 Python 3.10 之后加的智能提示——它连你打错的字都猜出来了。
第 5 步 · 用 Thonny 走一遍(有桌面的话)
菜单 → 编程 → Thonny → 打开 hello.py → F5。
看到什么算成功:
| 步骤 | 成功的样子 |
|---|---|
交互模式 7 * 6 |
打印 42 |
python3 hello.py |
打印两行中文,无任何报错 |
| 第 4 步故意写错 | 先打印出第一行,然后报 NameError,指出 line 2,并提示 Did you mean: 'print'? |
Thonny 里 F5 |
Shell 区显示同样两行 |
读结果:第 4 步里,"第一行成功、第二行才炸"这件事本身就是知识点——它证明 Python 是一行行边跑边翻译的(如果换成 C++,整个程序连第一行都不会输出)。而 line 2 和那个 ^^^^^ 箭头是最有价值的信息:Python 直接告诉你"我读到哪儿发现不对"。
七、30 秒实验
实验一:文件的后缀不影响运行
cp hello.py hello.txt
python3 hello.txt
照样跑出结果。 因为 Python 不看后缀,它是"把文件内容当代码读"。(那为什么还要写 .py?为了编辑器能高亮、为了别人一看就懂——这是"给人看"的约定,不是"给机器看"的。)
实验二:感受 shebang 的作用
nano whoami.py
写入:
#!/usr/bin/env python3
print("我是被谁跑的?")
chmod +x whoami.py
./whoami.py # 能跑,打印出那句中文
现在把第一行 shebang 删掉(只留 print 那行),再跑一次:
nano whoami.py # 删掉第一行,Ctrl+O 保存、Ctrl+X 退出
./whoami.py # 这次跑不起来了
结果是报错(大意是 Syntax error: ... "print",因为系统不知道该用 Python 来执行它,就用默认的 shell 去读,shell 看不懂 print(...) 这种写法)。
./文件名 这种跑法,靠的就是第一行的 shebang 告诉系统"用谁来执行我"。
把 shebang 删了,chmod +x 给的执行权限就"无处可施"了。而用 python3 文件名 这种跑法根本不需要 shebang——因为你已经把解释器指定给它了。
实验三:一句话验语法
python3 -m py_compile hello.py && echo "语法没问题 ✅"
没报错就会打印出 语法没问题 ✅。
八、常见误区
- "交互模式也能写正经程序" —— 不能。它不能保存、一次只能一行。它是草稿纸,正经程序一律落到
.py文件。 - "文件必须叫
.py,不然跑不了" —— 反了。后缀不影响能不能跑(Python 只看内容),它影响的是"别人和编辑器怎么认这个文件"。还是老实写.py。 - "写代码必须用 IDE,命令行写不了" —— 命令行不仅能写,在无头模式下它是唯一的写法。nano 三个键(保存/退出/搜索)就能撑起你这门课的大部分代码。
- "报错就是我的代码全废了" —— 正相反。Python 的报错是"从下往上读"的线索:最后一行说【什么错】,
line N说【在哪一行】。看得懂报错,你就能自己修——这是本章最有价值的一项技能。 - "Windows 上写的
.py,直接传过去就能跑" —— 大多数时候能,但换行符不一样(Windows 是\r\n、Linux 是\n),偶尔会报奇怪的错。解法:编辑器设成 LF,或传过去用sed -i 's/\r$//'转一遍。 - "Thonny 是给小孩用的,正经开发不能用" —— 它轻、内置解释器、有单步调试,在树莓派这种资源有限的机器上非常合适。VS Code 功能更强但吃内存(2GB 机型跑起来很吃力)——工具要配机器,不是越强越好。
自测三问(点开对答案)
1. 交互模式(REPL)和脚本文件,分别适合什么场景? 2. 无头模式下你没法开 Thonny,那在哪儿写代码?两种办法各是什么? 3. Python 报错信息该从哪一行开始读? **参考答案** 1. **交互模式是草稿纸**——试算、验证一句写法的对错,用一次就扔(**不保存**);**脚本文件是作业本**——正经程序都写在这儿,能保存、能传给别人、能反复运行。 2. **路线 A:就在树莓派上用 `nano` 写**(`nano 文件.py`,`Ctrl`+`O` 保存、`Ctrl`+`X` 退出),再用 `python3 文件.py` 跑;**路线 B:在 Windows 上写好,用 SFTP 或 `scp` 传过去跑**(注意换行符要设成 LF)。 3. **从最后一行往上读**。最后一行是【什么错】(如 `SyntaxError`、`ZeroDivisionError`),往上一行给出 `line N`(在哪一行)和箭头(指到出错位置)。- ☐ 下一节(6-3 Python 变量与运算符)
相关笔记
- 认识 Python 语言 —— 上一节:Python 是什么、为什么树莓派用它
- 在 Windows 和树莓派之间交换文件 —— 无头模式下把代码送到树莓派,用的就是这里的 SFTP 与 scp
- Raspberry Pi OS 应用程序界面 —— Thonny 是怎么"预装"到系统里的(程序名与软件包的关系)
- Linux 的常用指令 ——
mkdir -p、chmod +x、sed都出自这里 - 在 Raspberry Pi OS 执行命令 —— nano 的保存退出键、命令行基础
- 🍓 树莓派 · 索引 —— 全课路线图