零代码应用开发·第 9 章·3 学时

让代码在电脑上跑

装好解释器,学会用终端,读懂报错。

本章精髓 .py 文件双击没有反应,不是文件坏了,是这台机器上还没有能执行它的程序。网页能双击打开,是因为系统预装了浏览器;安装 Python 的实质,就是给 .py 文件配一个执行者。

学完本章后,你应该能够:

  1. 说清一个 Python 程序跑起来经过哪三个环节,其中哪一环需要自己动手装;
  2. 在 Windows 上装好解释器,并用两条命令验证它确实装成了;
  3. 用终端切换当前目录,以命令方式运行指定的 .py 文件;
  4. 照四个前提条件逐条排查运行失败,而不是反复重装;
  5. 读一段栈回溯,说出错误类型与出错行号,并按四件套向大模型求助。
配套演示文件 第09章演示_四条件模拟器.html 第09章演示_报错拆解.html 第09章演示_随机点名器.py 第09章演示_三行版.py 第09章演示_名单读取版.py 第09章演示_名单.txt 第09章演示_报错1_库名拼错.py 第09章演示_报错2_中文标点.py 第09章演示_报错3_行首空格.py

换一条产品线,先解决双击没反应

成品 · 三个环节 · 报错原样贴回去

这一部分的难点不在代码,在于让它跑起来。

1.1本章成品:随机点名器

成品是一个只有十几行的 Python 程序。名单写在代码里,运行后从中随机取出一个姓名,显示在终端上。要增减名单,改代码里的那一行,保存后重新运行。

命令提示符
C:\Users\liwei\Desktop\点名器> python 点名.py 名单共 8 人 本次抽中: 周敏 按回车键结束

提示符前面的那段路径,就是终端此刻所处的目录

代码由大模型生成,几分钟就能拿到。本章要花时间的,是让它在你面前这台机器上真的跑出结果。前八章的作品双击就能打开,这一章的作品双击没有任何反应,差别就是这一部分要讲清楚的东西。

1.2从文件到结果,中间要经过谁

运行一个 Python 程序,实际发生的是三个环节:

源文件
点名.py
纯文本,自己不会动
解释器
python.exe
逐行读取并执行
标准输出
终端窗口
显示 print 的内容

三个环节里,只有中间那一环需要自己装

网页文件之所以双击就能打开,是因为承担中间一环的浏览器由系统预装。解释器不在预装名单里。

index.html 浏览器(系统预装)页面显示出来
点名.py 解释器(要自己装)装之前什么都不会发生

两类文件都是纯文本,差别在于系统里有没有对应的执行程序

这也是前八章一直没提的一件事:你做的网页能在别人机器上打开,靠的是别人机器上也有浏览器。凡是要靠某个程序才能跑起来的东西,交付时就得考虑对方那边有没有这个程序。

1.3本章新技巧:报错原样贴回去,给证据不给结论

向大模型描述故障时,要给的是四项内容:我做的操作、我预期的结果、实际发生的现象、报错信息的完整原文。前三项交代现场,第四项是判断依据。

只说"运行失败"或者"报错了",它只能按最常见的情形猜。猜的代价通常不是多问一轮,而是它会直接重写整份代码。重写之后,你原来的代码执行到哪一步、在哪一行断的,全都对不上了。

报错信息里看起来最像废话的那几段,恰恰是定位价值最高的:文件的完整路径说明它读的是哪个文件,行号说明断在第几行,字符编号说明是这一行的第几个字符。转述一遍,这些全丢了。

1.4可直接复制的提示词

发给 AI安装环境 · 只在第一次装 Python 时用
我要在 Windows 11 上安装 Python,用来运行一些小脚本。 请说明:装哪个版本、从哪里下载、安装时哪些选项必须勾选(尤其是环境变量那一项)、 装完之后怎么在终端里验证装成功了。 每一步写清楚需要点哪里、看到什么现象算成功。不要给截图链接,用文字描述。
发给 AI生成代码 · 做作品时用
写一个 Python 脚本,用于课堂随机点名,在 Windows 的终端里运行。 要求: ① 名单直接写在代码里,用一行列出,方便我以后自己增减姓名; ② 每次运行随机抽一人,先输出名单人数,再输出抽中的姓名; ③ 只用 Python 标准库,不要用需要 pip 安装的第三方库; ④ 不要做图形界面,结果直接输出到终端; ⑤ 末尾加一行等待回车的语句,让双击运行时窗口不会立刻关掉; ⑥ 每一段代码前加一行中文注释,说明这一段的作用。
发给 AI报错求助 · 运行中断时用
我在 Windows 上运行这段 Python 代码,运行中断了。 我做的操作:在终端里输入 python 点名.py 并回车。 我预期的结果:屏幕上显示一个姓名。 实际发生的:出现下面这段报错。 报错原文(完整复制,一个字没改): [粘贴完整报错] 代码: [粘贴代码] 请先用中文解释这段报错的含义,再说明应当改哪一行、改成什么。 不要重写整个脚本,只给出需要修改的那几行。

第二段提示词里的四条要求,每一条都对应后面要讲的一个知识点:

名单直接写在代码里,用一行列出
改动集中在一行,不会波及别处
只用 Python 标准库
知识点 07:第三方库要另外装,机房网络下耗时长
不要做图形界面,结果直接输出到终端
知识点 06:本章的输出经由标准输出显示在终端里
末尾加一行等待回车的语句
知识点 01:双击运行时,程序一结束窗口就关掉了

1.5大模型的常见偏差

只返回改好的代码,不作解释。 这样能解决当次问题,同类错误再出现时你仍然判断不了。"请先用中文解释这段报错的含义"这句要保留,而且要放在"再说明应当改哪一行"前面。

忽略你贴的报错,重写整份脚本。 重写之后的代码和你手上那份不再对应,改了哪里无从核对。必须写明不要重写整个脚本,只给出需要修改的那几行

附送你没要的功能。 最常见的是加图形界面、语音播报、表格导出。这些都依赖第三方库,在机房网络下装起来很慢。"只用标准库""不要做图形界面"两句要同时写上。

备用方案 机器装不上 Python 的,先两人共用一台完成后面的步骤。第09章演示_四条件模拟器.html第09章演示_报错拆解.html 是网页,双击就能开,不需要装任何东西,也不需要联网,可以先用它们把四个条件和报错读法过一遍。

解释器、PATH 与四个前提条件 本章重点

解释器 · PATH · 终端 · 当前工作目录 · 扩展名

本章的核心内容集中在这一部分和第四部分。

本章要学的术语 · 八个
01解释器interpreter
02环境变量 PATHPATH
03终端·命令行terminal / CLI
04当前工作目录working directory
05源文件与扩展名source file / .py
06标准输出print / stdout
07库与 piplibrary / pip
08栈回溯traceback

这八个术语会原样出现在安装界面、报错信息和技术文档里。前五个在本部分讲解,第六、七个在第三部分,第八个在第四部分。

2.1五个知识点,一个一个看

01解释器:负责执行 .py 文件的那个程序
安装前 没有程序认领这个文件双击毫无反应
安装后 解释器逐行执行终端里出现结果

装 Python,装的主要就是这一个程序

现象:双击 点名.py 之后没有窗口出现,或者弹出一个"选择打开方式"的对话框。

概念:.py 文件是纯文本,里面的语句要由一个专门的程序读取并执行,这个程序叫解释器(interpreter)。浏览器由系统预装,所以 .html 双击就能开;解释器不属于预装组件,装它之前,系统不知道该拿这个文件怎么办。

类比:乐谱本身不会发出声音,要有演奏者按谱演奏。

02环境变量 PATH:系统去哪几个目录里找这个命令
终端里输入 python
按 PATH 登记的顺序依次查找
C:\Windows\system32未找到
C:\Windows未找到
…\Programs\Python313找到

没登记进这份清单,就会全部未找到

现象:安装界面第一屏下方有一个复选框。没勾的人在终端里输入 python,会得到"不是内部或外部命令"。

概念:PATH 是一项环境变量,内容是一组目录路径。在终端里输入命令名之后,系统按顺序到这些目录里找同名的可执行文件,全部找不到就报告命令不存在。勾上那个复选框,就是把 Python 的安装目录写进这组路径。

类比:门卫处登记的住户名单。人确实住在楼里,没登记就是查无此人。

03终端:用打字的方式操作计算机
命令提示符
C:\Users\liwei> python --version Python 3.13.1 C:\Users\liwei>

版本号因安装版本而异,能显示出来就算装成了

现象:一个只显示文字的窗口,行首是一段路径,后面跟着等待输入的光标。

概念:终端(terminal,也叫命令行界面 command line interface)是操作系统提供的另一种交互方式:输入命令下达指令,而不是点击图标。Windows 上常用的是命令提示符与 PowerShell。程序的输出和报错都显示在这个窗口里,所以本章的操作都在终端内完成。

类比:在餐厅可以指着菜单点,也可以直接报菜名。后者更快,前提是你知道菜名。

04当前工作目录:终端此刻站在哪里
C:\Users\liwei终端启动时在这里
├ Documents
├ Downloads
└ Desktop
└ 点名器
└ 点名.py文件在这里

两者不在同一个位置,要先用 cd 切过去

现象:文件明明在桌面上,终端却提示 can't open file。

概念:终端在任何时刻都处在某个目录之下,这个目录叫当前工作目录(working directory),提示符前面那段路径就是它。命令里给出的文件名,默认是相对于这个目录去找的。切换目录用 cd 命令,即 change directory。

类比:在校园里说"三楼那间教室",对方得先知道是哪一栋楼。

05源文件与扩展名:保存这一步最容易出错
PY
点名.py
解释器能执行
TXT
点名.py.txt
只是一个文本文件

资源管理器默认隐藏扩展名,两者在文件夹里显示成同一个名字

现象:用记事本保存之后,终端提示找不到这个文件。

概念:Python 源文件是纯文本文件,扩展名必须是 .py。记事本默认按 .txt 保存,"保存类型"没改成"所有文件",得到的就是一个文本文件。资源管理器默认隐藏已知扩展名,要在"查看"里打开显示扩展名,才看得到文件名真实的结尾。

类比:扩展名相当于包裹上的品名标签。标签写错,分拣时就会送到别处。

2.2四个前提条件

上面五个知识点,在实际操作里合成四个必须同时成立的条件。少任何一条,程序都跑不起来,而且四种情况给出的提示各不相同。

条件一
系统里已经装了 Python 解释器
安装包从 Python 官方网站获取,选 Windows 版本。
双击 .py 没反应,或弹出"选择打开方式"
条件二
解释器所在目录已经登记进 PATH
在安装界面第一屏勾上那个复选框就完成了登记。
终端提示"不是内部或外部命令"
条件三
文件是纯文本,扩展名是 .py
记事本另存为时,"保存类型"要选"所有文件"。
文件实为 点名.py.txt,终端提示找不到该文件
条件四
终端的当前目录就是文件所在的目录
在文件夹地址栏输入 cmd 回车,可以直接在这里打开终端。
终端提示 can't open file

打开 第09章演示_四条件模拟器.html,把四个开关任意关掉几个,看终端会给出哪一句提示。反过来练更有用:先看提示,再判断是哪一条没成立。

本章方法 运行失败时,按一、二、三、四的顺序逐条核对,核对到哪一条不成立就停在哪一条。这比重装一遍有效,因为重装只可能修好第一条和第二条。
讨论这四个条件里,哪几条属于一次性设置,此后不必再管?哪几条在每一次运行程序时都要重新确认?把它们分成两组之后,你每次运行前真正需要检查的其实只有几条?

2.3本章要用的四条命令

python --version
显示解释器版本,用来确认装成功了。能出版本号,说明条件一和条件二都满足。
cd 文件夹名
把终端的当前目录切到指定文件夹。路径里有空格时,要用英文双引号括起来。
dir
列出当前目录下的文件,用来确认目标文件确实在这里、文件名有没有多出 .txt。
python 文件名.py
运行指定的源文件。本章的核心命令,其余三条都是为它做准备。

代码里的每一行在做什么

标准输出 · 库与 pip · 逐行核对

不用逐字读懂,但要知道改哪一行、为什么有这一行。

3.1另外两个知识点

06标准输出:程序把结果送出来的那条通道
已经算出结果没有 print屏幕上什么也没有
已经算出结果print(…)终端显示结果

算过不等于显示过

现象:终端里出现的那几行文字。

概念:print 把括号里的内容送到终端上显示,这条输出通道叫标准输出(standard output)。程序内部的计算过程不会自动显示,没有经过 print 的结果不会出现在屏幕上。运行之后"什么反应都没有",常见原因之一就是代码里根本没有输出语句。

类比:心算完了不报答案,旁人无从知道你算没算过。

07库与 pip:现成的工具箱,取出来才能用
标准库
随 Python 一起装好,import 就能用。random、os、csv 都在里面
第三方库
别人写好放在网上,要先用 pip 装到本机,再 import
你的代码
import 一行,把上面两层的功能取到手边

两层库的区别只有一个:需不需要先装

现象:代码第一行的 import random;有些代码还要求你先在终端里执行一句 pip install

概念:(library)是别人写好、可以直接使用的一批功能。随 Python 一同安装的那批叫标准库,random 就是其中之一。标准库以外的叫第三方库,要用 pip 从网上装到本机。无论哪一种,使用前都要用 import 这一句取出来,没有 import 而直接使用,解释器会报告名称未定义。

类比:工具箱里备着工具,用之前还是得先伸手取出来。

本章方法 读代码时只确认三点:输入在哪里、输出在哪里、重复的部分在哪里。这三处以外的行,看不懂也不影响你改动和验收。

3.2本章的完整代码

下面这份代码由大模型生成,共十六行,其中五行是注释。名单写在第二段的方括号里,增减姓名只改这一行。

第09章演示_随机点名器.py全文 · 可直接运行
# ① 导入标准库 random,它提供随机选择功能
import random

# ② 名单直接写在代码里。增加或删除姓名时,改这一行即可
names = ['林晓', '周敏', '赵鹏', '陈立', '孙倩', '王一凡', '李文博', '黄雅琴']

# ③ 从名单里随机取出一个元素
picked = random.choice(names)

# ④ 把结果输出到终端
print('名单共', len(names), '人')
print('本次抽中:', picked)

# ⑤ 双击运行时窗口会在程序结束后立刻关掉。这一行让程序停在这里等一下
input('按回车键结束')

按本章方法核对一遍:输入是 ② 的名单,输出是 ④ 的两条 print,这一份里没有重复执行的部分。

import random
导入标准库。random 提供随机选择功能,用之前必须先导入。 缺这一行,执行到 random.choice 时报告名称未定义
names = ['林晓', …]
名单。方括号里的若干项构成一份清单,增减姓名只改这一行。 引号或逗号打成中文全角标点时,报告语法错误
random.choice(names)
从清单里随机取一项。每次运行结果可能不同,这是预期行为,不是错误。
print('名单共', len(names), '人')
输出名单人数。这一行不影响抽取结果,作用是让人数这个数字能被核对。 没有这一行,名单被少读了几项也看不出来
input('按回车键结束')
让程序停在这里等一下。 缺这一行,双击运行的窗口会在程序结束后立刻关掉

3.3把名单从代码里搬出来

上面那份代码有一个明显的限制:换一个班就要改代码。让名单住到一个单独的文本文件里,改名单就不必碰代码了。

第09章演示_名单读取版.py改动集中在第 ② 段
# ① 导入标准库 random
import random

# ② 从同一个文件夹里的 第09章演示_名单.txt 读名单,一行一个姓名
with open('第09章演示_名单.txt', encoding='utf-8') as f:
    names = [line.strip() for line in f if line.strip()]

# ③ 名单为空时直接说明,不要装作抽了一次
if len(names) == 0:
    print('名单文件是空的,请先往里面写几行姓名')
else:
    print('名单共', len(names), '人')
    print('本次抽中:', random.choice(names))

input('按回车键结束')

这一版多出两件事,都值得留意。encoding='utf-8' 是在告诉解释器按哪一套编码去读这个文件,不写这一句,中文姓名在部分机器上会读成乱码。第 ③ 段处理的是名单文件存在但里面一个字都没有的情况,这一步不做,程序会在你看不见的地方出错。

多了一个文件,就多了一份路径依赖。这一版要求 第09章演示_名单.txt 和 .py 文件在同一个文件夹里,并且终端的当前目录也在这里。把 .py 单独发给同学而不带名单文件,对方运行时会得到 FileNotFoundError。这正是第八章说的交付物不完整,只是换成了 Python 的形态。

报错是线索,不是事故 本章重点

栈回溯 · 从最后一行读起 · 五类高频报错

程序中断时给出的那几行英文,是这门课里信息密度最高的东西。

4.1第八个知识点

08栈回溯:中断时留下的诊断记录
Traceback (most recent…)
File "点名.py", line 5
NameError: …

最后一行给类型,上面几行给位置

现象:程序中断后,终端里出现的若干行提示,通常以 Traceback 开头。

概念:这段信息叫栈回溯(traceback),是解释器在执行中断时输出的诊断记录。最后一行给出错误类型与具体原因,上面各行给出出错的文件、行号和那一行的源代码。所以阅读顺序应当从最后一行开始,再往上找位置。

类比:查快递先看最新一条,它才说明包裹现在在哪。

4.2四行报错,逐行拆开

下面这段是运行 第09章演示_报错1_库名拼错.py 之后终端的实际输出,一个字没改。

终端输出的报错信息共 4 行
Traceback (most recent call last): File "C:\Users\liwei\Desktop\第9章\第09章演示_报错1_库名拼错.py", line 3, in <module> import radnom ModuleNotFoundError: No module named 'radnom'
固定开头 每段报错都以这一句起始,本身不含定位信息,可以略过。
文件与行号 出错的文件路径与行号。改的时候直接定位到这个文件的第 3 行。
那一行的源代码 出错那一行的原文,用来确认你定位到的是不是同一行。
错误类型与原因 最后一行,也是应该最先读的一行。这里说的是找不到名为 radnom 的模块。

打开 第09章演示_报错拆解.html,五类报错各拆一遍。页面会按 ④②③ 的顺序把三行依次点亮,这就是你以后读报错时眼睛该走的路线。

4.3五类高频报错速查

本章实践里出现频率最高的五类如下。先按最后一行确定类型,再依据第二行定位到具体的行。

类型
报错原文(末行)
常见原因
模块未找到
ModuleNotFoundError: No module named 'radnom'
库名拼写有误,或者这个库还没装
名称未定义
NameError: name 'random' is not defined
没有 import 就用了,或者名称拼错
语法错误
SyntaxError: invalid character ',' (U+FF0C)
代码里混进了中文输入法的全角标点
缩进错误
IndentationError: unexpected indent
行首多出空格,复制粘贴之后最常见
文件无法打开
python: can't open file '…\点名.py': [Errno 2] No such file or directory
终端的当前目录不对,或者文件实为 .py.txt

三个报错演示文件分别对应表中的第一、三、四类,各运行一次就能看到真实输出。

报错不等于程序坏了。 它是解释器在中断时给出的诊断记录,说明中断发生在哪一行、原因是什么。更需要提防的是不报错但结果不对的情形:名单里的姓名被写成了一整个字符串,程序照常运行,每次输出的却是同一个结果。代码里保留输出人数的那一行,正是为了让这类问题露出来。

4.4报 bug 三件套

你在互测里发现同组同学的程序有问题,或者要向教师描述一个故障,交出去的东西应当有三样:

第一件
截图

终端窗口的完整截图,看得到提示符路径、输入的命令和全部输出。只截输出那一段,看不出他是在哪个目录下运行的。

第二件
复现步骤

从解压开始,一步一步写到出问题的那一步,写到对方照着做能得到同样的结果为止。

第三件
期望结果

你原本以为会看到什么。少了这一条,对方只知道你不满意,不知道你要的是什么。

这三件套和第三章的验收标准是同一个东西的两面:验收标准写的是"照着做应当得到什么",报 bug 写的是"照着做实际得到了什么"。会写验收标准的人,天生会报 bug。

4.5前沿三分钟:报错信息的可读性

每章固定栏目 · 一条与本章内容相关的行业动态

早期的编程语言出错时往往只给一句 syntax error,具体位置和原因要使用者自己排查。近年这一状况有明显改变。Python 的报错先是加入了拼写推测,名称写错时会提示 Did you mean;此后在报错里加入了指向具体表达式的标记符号;再往后,漏掉 import 语句也会被一并指出。

这一变化的出发点是:读报错属于日常工作里的高频动作,报错说得清楚,节省的是全部使用者的时间。已经有语言项目把报错信息的可读性写进主要特性对外说明,也就是把它当产品的一部分来设计,而不是当日志。

对本章的实际影响有两点:安装时不必特意去找旧版本,新版本的报错给的线索更多;但这些信息仍然是英文,仍然要读到最后一行才能确定类型。

讨论报错信息里通常带着这台电脑的用户名和完整路径。把它整段交给在线服务,算不算交出了个人信息?哪些情况下应当先处理再提交?处理之后,会不会反过来影响定位?

上机实验

三选一 · 六步 · 报错记录四项

上机环节由此开始,当堂完成并提交。

5.1三个题目,任选其一

题目 A
随机点名器

名单写在代码里,随机抽一人,同时显示名单人数。

通用
题目 B
今日书目推荐

书单写在代码里,随机推荐一本,可以附上作者姓名。

偏文科
题目 C
随机分组

名单写在代码里,打乱后按每组指定人数划分,逐组输出。

偏理工

三个题目的数据都写在代码里,运行方式与验收标准一致。允许更换题材。

5.2上机六步

1
用安装提示词拿到步骤清单,先核对里面有没有提到环境变量
没提这一项的清单是不完整的,照着装会在第 3 步出问题。已经装好 Python 的机器,跳到第 3 步验证一次
产出:一份安装清单
2
下载并安装,勾上 Add python.exe to PATH
安装包从 Python 官方网站获取。装的时候漏勾了不必卸载,重新运行安装包选 Modify 补上即可
产出:装好的解释器
3
打开终端,执行 python --version 与 pip --version
两条都能显示版本号,才算条件一和条件二都过了。显示"不是内部或外部命令"的,回第 2 步
产出:两行版本号
4
用生成提示词拿到代码,另存为 .py,在文件所在文件夹打开终端运行
保存后先核对文件名真实的结尾,确认不是 .py.txt。在文件夹地址栏输入 cmd 回车,可以省掉 cd 一步。截图里要能看到提示符路径和输入的命令
产出:运行截图
5
改代码里的数据,保存后重新运行
加两条、删一条,核对人数那一行的数字有没有跟着变。这一步用来确认你能自己改动并再次运行
产出:修改前后两次输出
6
故意制造一次报错,按报错求助提示词提交原文
三选一:库名改错一个字母、某行行首多加两个空格、把一个英文逗号换成中文逗号。先自己读出错误类型和行号,再提交,然后对照两边的判断是否一致
产出:报错记录四项

5.3共同验收标准

程序在终端里运行成功 命令由本人输入,不是双击运行 截图里看得到提示符路径和输入的命令,只截输出部分不予认可
改了代码里的数据之后,输出跟着变 代码其余部分没有改动 加两条数据重新运行,核对人数那一行的数字
程序结束前有等待回车的语句 双击运行时窗口不会立刻关掉 双击该文件,确认窗口停在结果画面
能说出报错的类型和位置 依据栈回溯的最后一行与文件行号 在文档里用一句话写明是哪一类错误、出在第几行
报错记录四项齐全 报错原文、提交的文字、得到的解释、修改的那一行 四项都出现在文档里,缺一项不予认可
说得出四个前提条件里,自己卡在了哪一条 一次都没卡住的,写明四条各自是怎么确认的 写出条件编号和当时终端给的那句提示

5.4常见错误与处理

输入 python 提示"不是内部或外部命令"
安装时没勾环境变量选项
重新运行安装包选 Modify 补勾;临时可以改用 py 点名.py
输入 python 之后打开了应用商店
系统的应用执行别名把 python 指向了商店
在设置里搜"应用执行别名",关掉 python.exe 相关的两项,重新打开终端
提示 python: can't open file
终端的当前目录不是文件所在目录
在文件夹地址栏输入 cmd 回车重新打开终端;或者用 cd 切过去
双击 .py 之后窗口一闪就关
程序结束,窗口跟着关掉
在代码末尾加 input('按回车键结束'),或者改在终端里运行
文件名实际是 点名.py.txt
记事本另存为时没改"保存类型"
打开资源管理器的扩展名显示,删掉多余的 .txt
报语法错误 invalid character
代码里混进了中文输入法的全角标点
把那一行的逗号、引号、括号全换成英文半角
报缩进错误 unexpected indent
行首多出空格,复制粘贴之后最常见
删掉该行行首的空格,让它与上下文对齐
终端里的中文显示成方块
终端所用字体不含中文字形
在终端窗口的属性设置里,把字体改成新宋体或其他中文字体
报 FileNotFoundError,说找不到名单文件
做了名单读取版,但 .txt 与 .py 不在同一个文件夹,或者终端当前目录不对
dir 确认两个文件都在当前目录下,再运行

5.5提交内容

源文件
一个 .py 文件,数据写在代码里
单个文件,不必压缩
终端运行截图
路径、命令、输出三项都在画面里
一张截图贴进作业文档
报错记录
原文、提交的文字、得到的解释、修改的那一行
四段文字贴进作业文档
四条件自查
自己卡在哪一条,当时终端给的是哪一句提示
两行文字

提交方式:按教师提供的作业模板填写,文档开头注明所选题目。提交渠道见课堂通知,当堂提交。

5.6再进一步(选做)

让抽取结果不重复:在代码里另设一份已抽名单,每次抽中之后把这个姓名移出候选范围。

做完会碰到一个需要判断的情形:候选范围只剩一个人时,这一次抽取的结果是确定的。此时程序应当照常输出,还是给一句提示并重新开始,由你自己决定,并把决定写进说明。

更进一步的一版是把名单搬进 第09章演示_名单.txt,让改名单不必碰代码。做到这一步,你交出去的就不再是一个文件,而是一个包。

本章小结

本章五条结论

  1. .py 双击没反应,是因为系统里缺一个能执行它的程序。装 Python 就是给它配这个执行者。
  2. 程序能跑起来要同时满足四个条件:解释器已装、路径已登记、文件是 .py、终端在文件所在目录。上机时的多数问题都能归进其中一条,按顺序核对比重装一遍有效
  3. 栈回溯从最后一行读起。最后一行给类型,上面几行给文件与行号。
  4. 向大模型求助时交四项:操作、预期、现象、报错原文。转述一遍,定位所需的信息就丢了。
  5. 报错会停下来,不报错但结果不对不会。人数那一行不影响抽取结果,作用是让这类问题露出来。
本章脉络