遇见Python——编程世界的新朋友
1.1 一个让两小时变成两分钟的秘密
每天晚上八点半,小明的爸爸都会坐在餐桌前,揉着太阳穴,对着一台笔记本电脑发呆。电脑屏幕上是一份销售报表,里面记录着公司过去一个月里每一笔订单:日期、产品名称、单价、数量、收货地址、客户电话……密密麻麻的数字像一片灰色的森林。
小明的爸爸是一家小型贸易公司的销售助理。每个月底,他都要把三十多份 Excel 表格合并成一张总表,再把表格里"金额"那一列的数字全部加起来,核对有没有算错。然后,他要给每一个买过东西的客户发一封邮件,告诉他们货款已经到账,并且把到账金额填进邮件正文里。最后,他还要把这三十多个 Excel 文件按照月份归档,拷贝到公司的备份文件夹。
这些事情听起来并不难,对吗?可是当它们日复一日重复三十次、六十次、一百次的时候,就会变成一场漫长的"数字苦役"。小明偷偷观察过:爸爸光是"打开每个文件、复制金额、粘贴到总表"这一个动作,就要重复一百多遍。一百多次点击鼠标、一百多次按 Ctrl+C、一百多次按 Ctrl+V。手酸,眼睛累,脖子僵,等到全部做完,常常已经过了晚上十一点。
有一天晚上,小明忍不住问:"爸爸,这些事情为什么不让电脑自己做呢?"
爸爸苦笑着说:"电脑又听不懂人话。我让它做的事情太复杂了,它不会。"
"那如果有人会一门'电脑能听懂的话',是不是就可以让电脑自己干?"
"当然可以。那门'电脑能听懂的话',有一个正式的名字,叫作——编程。"
小明的眼睛一下子亮了。他从那天起开始思考一个问题:如果他学会了一点点编程,能不能帮爸爸把这些重复、繁琐、让人疲倦的事情交给电脑去做?两小时的工作,能不能压缩到两分钟?
这个问题的答案,就是这本书要告诉你的秘密。
---
1.2 编程的本质:给电脑写清晰的指令
我们先来回答最基本的一个问题:编程到底是什么?
很多人听到"编程"两个字,会觉得它高深莫测,仿佛只有穿格子衫、戴黑框眼镜的叔叔才能学会。其实不是。编程的本质非常简单,简单到可以用一句话概括——
> 编程,就是给电脑写清晰的指令。
想象一下你家里有一台智能扫地机器人。你按下电源键,它开始工作:前进、转弯、遇到墙就掉头、扫完了就回去充电。这台机器人之所以能够完成这一连串动作,是因为工程师在它的"大脑"里预先写好了一份"说明书",告诉它在每一种情况下应该做什么。这份说明书,就是程序;写说明书的过程,就是编程。
可是电脑不像人那么"聪明"。你可以对同学说"把那个东西递给我",同学会观察你的眼神、你的手势、你说话的语气,判断出"那个东西"指的是桌上的笔还是窗外的云。电脑不行。电脑非常"笨",你必须把每一步都说得清清楚楚、明明白白,不能有任何歧义,也不能省略任何细节。
举个例子。如果你想让电脑把桌面上所有"销售报表"开头的 Excel 文件复制到"备份"文件夹里,用人话讲起来很简单:"把那些销售报表复制过去。"可是电脑听不懂"那些"是指哪些。所以你必须告诉它:
1. 打开桌面的文件夹; 2. 找出所有文件名以"销售报表"开头的文件; 3. 对每一个找到的文件,执行复制操作; 4. 把复制出来的版本粘贴到"备份"文件夹里; 5. 复制完成后,给用户显示一条提示:"完成,已复制 X 个文件"。
注意看,这五句话里,每一句都只包含电脑可以"听懂"的动作:打开、找出、复制、粘贴、显示。没有"那些"、"之类的"、"差不多就那样"这种模糊的词。这种"把人类要做的事情翻译成电脑能一步步照着做的指令"的过程,就叫作编程。
把这条规则记在心里,未来你在写每一段代码之前,先问自己三个问题:
- 第一步要做什么?
- 第二步要做什么?
- 电脑在每一步会不会有"听不懂"的地方?如果有,就要把那一步拆得更细。
这便是编程思维最核心的一条:清晰、具体、没有歧义。
---
1.3 Python 的诞生:一只叫"蟒蛇"的魔法师
现在我们知道编程是什么了。接下来的问题是:人类可以使用的"电脑语言"有成千上万种,比如 C、Java、JavaScript、Go、Ruby……本书为什么要特别挑出 Python 来学习?
这就要从 Python 的身世讲起了。
1989 年的圣诞节,荷兰阿姆斯特丹的一位年轻程序员吉多·范·罗苏姆(Guido van Rossum)在家闲着没事。他想:"能不能设计一种新的电脑语言,让它读起来像英语、写起来像写文章、谁都能学会?"他把这个想法付诸实践,写出了 Python 的第一版代码。Python 这个名字并不是来自那条盘在树上的蟒蛇,而是来自罗苏姆非常喜爱的一部英国喜剧《蒙提·派森的飞行马戏团》(Monty Python's Flying Circus)。不过后来因为这个标志太深入人心,社区干脆就用一条盘起来的蟒蛇作为 Python 的官方图标。所以你今天看到的那条蓝黄相间的蛇,就是 Python 的"形象代言人"。
从 1989 年到现在,Python 已经三十多岁了。在这三十多年里,它一步一步从一个小众项目成长为世界上最流行的编程语言之一。根据各大编程语言排行榜的统计,Python 长期占据前三名的位置,被无数程序员、数据科学家、工程师、甚至中小学生学习和使用。
为什么 Python 能够脱颖而出?因为它有几个特别突出的优点:
第一,语法简洁,读起来像英语。
让我们来对比一下。用 C 语言写一段"把 Hello, World! 打印到屏幕上"的代码,你需要这样写:
```c #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; } ```
而用 Python,只需要一行:
```python print("Hello, World!") ```
看见了吧?Python 没有那些花括号、分号、奇怪的 include。它就像一句普通的话:`print` 是"打印",`"Hello, World!"` 是要打印的内容。任何一个懂英语的孩子,看到这行代码都能猜出它的意思。这就是 Python 的魅力——它把复杂的语法藏起来,让你能专注于"我要让电脑做什么",而不是"我要怎么让电脑听懂"。
第二,库非常丰富,几乎什么都能做。
什么是"库"?库就是别人已经帮你写好的代码包,你可以直接拿来用,就像乐高积木里别人帮你做好的那块特殊零件。Python 有一个庞大的"标准库"——Python 自带的、随时可以使用的工具集。还有更大的"第三方库"——全世界几百万程序员共同贡献的工具集。想处理 Excel?有人写好了 `openpyxl`、`pandas`;想发邮件?有人写好了 `smtplib`、`yagmail`;想整理文件?有人写好了 `os`、`shutil`、`pathlib`;想识别图片里的文字?有人写好了 `pytesseract`。这些库让你不需要从零开始造轮子,只需要调用几行代码,就能完成原本需要几百行的工作。
第三,社区非常活跃,问题很容易找到答案。
学习任何一种技能,最怕的就是卡在一个问题上没人帮忙。Python 的社区是全世界最大、最热情的编程社区之一。无论你遇到什么奇怪的报错信息,只要把这段报错复制到搜索引擎里,几乎都能找到别人遇到同样问题的帖子和解答。在本书后面的章节里,我们会反复用到这个技巧:报错信息不是敌人,而是魔法师给你的提示。
正因为 Python 简单、强大、有无数人帮你"铺路",所以它特别适合作为小朋友学习编程的第一门语言。你不需要先记住很多复杂的规则,就可以开始写一些真正有用的程序。这正是本书选择 Python 的原因。
---
1.4 办公自动化的魅力:让重复劳动消失的魔法
现在我们回到小明爸爸的故事。假设小明学会了 Python,他可以怎样帮助爸爸?
让我们一步一步想象。
第一个魔法:自动合并 Excel 文件。
小明的爸爸桌面上有三十多个 Excel 文件,每个文件里都有"日期、产品、单价、数量、金额、客户邮箱"这几列。如果让小明手动合并,他要把这三十个文件一个一个打开,把里面的数据复制,再粘贴到一张总表里。这需要几百次点击鼠标。
可是如果小明写了一段 Python 程序,运行之后会发生什么呢?程序会自动扫描桌面上所有符合"销售报表"开头的文件,把每一个文件里的数据读取出来,合并成一张新的总表,保存到爸爸指定的文件夹里。整个过程不需要小明点一下鼠标,他只需要双击运行那个程序,然后去喝杯牛奶,等几秒钟,程序就完成了。
原来两小时的工作量,现在变成了两分钟。
第二个魔法:自动发送邮件。
合并完总表之后,爸爸还要给每个客户发一封"您的货款已到账"的邮件。如果客户有一百个,爸爸就要写一百封内容几乎相同的邮件,每封只改一下称呼、金额和日期。这又是一个"高度重复"的任务。
Python 同样可以做到。Python 可以登录爸爸的邮箱(前提是爸爸授权了),从总表里读取每一行客户信息,根据每一行的内容自动生成一封邮件,然后自动发送给对应的客户。邮件的称呼、金额、日期都是程序自动填好的,不会写错,也不会漏发。
如果用程序来发这一百封邮件,大概需要多久?几秒钟。
第三个魔法:自动归档文件。
每个月结束后,爸爸还要把当月的所有 Excel 文件归档到"2024年1月"、"2024年2月"这样的文件夹里。这件事情看似简单,可是每次都要手动新建文件夹、复制、粘贴、删除原文件。一个月做一次还好,可是做了几年就会让人怀疑人生。
Python 同样可以一句话搞定:扫描所有 Excel 文件,读取文件名里的月份信息,根据月份创建对应的文件夹,把文件移动进去。全程不需要爸爸动手。
这就是办公自动化的魅力。它的英文名字叫 Office Automation,简称 OA。它不是什么神秘的高科技,它就是"用程序把办公中重复、繁琐的事情交给电脑去做"。一旦你学会了这项技能,你就会发现:原来办公室里很多看似"必须由人来完成"的工作,其实都可以交给一段几十行的代码。
更重要的是,办公自动化有一个特别适合小朋友学习的优点:它有立竿见影的成就感。你写完一段代码,运行之后立刻就能看到效果——文件被整理好了,邮件发出去了,表格合并完成了。这种"我写的代码真的改变了现实"的感觉,是学习编程最强的动力。
---
1.5 本书学习地图:15 章魔法修炼之旅
现在你已经知道了编程是什么、Python 是什么、办公自动化是什么。在正式开始学习之前,让我们先看一下本书的全貌。
本书一共 15 章,按照"由浅入深、由小到大"的顺序,依次带小朋友从零开始,最终打造出一个属于自己的"智能办公助手"。整张地图可以分为五个阶段,像爬一座魔法塔一样,一层一层往上走。
下面是这 15 章的"魔法学习地图":
```mermaid flowchart TD A[第一阶段 认识魔法师] --> A1[第1章 遇见Python] A --> A2[第2章 安装Python与编辑器] A --> A3[第3章 与Python对话] B[第二阶段 学习魔法咒语] --> B1[第4章 变量与数据类型] B --> B2[第5章 条件判断] B --> B3[第6章 循环语句] C[第三阶段 组合魔法阵] --> C1[第7章 列表与字典] C --> C2[第8章 函数封装] C --> C3[第9章 文件读写] D[第四阶段 实战办公自动化] --> D1[第10章 Excel自动化] D --> D2[第11章 邮件自动化] D --> D3[第12章 文件整理与PDF处理] D --> D4[第13章 网页数据抓取] E[第五阶段 打造智能助手] --> E1[第14章 综合项目] E --> E2[第15章 编程的未来与下一步] A1 --> B A2 --> B A3 --> B B1 --> C B2 --> C B3 --> C C1 --> D C2 --> D C3 --> D D1 --> E D2 --> E D3 --> E D4 --> E ```
我们逐层解释一下这张地图。
第一阶段:认识魔法师(第 1 ~ 3 章)。 这一阶段的目的是让你和 Python 交上朋友。第 1 章你已经读到了——我们在这一章里理解了编程的本质、Python 的来历,以及办公自动化的魅力。第 2 章我们会一起动手,把 Python 安装到自己的电脑上,并且学会使用一个叫作"代码编辑器"的工具。第 3 章我们会学习怎么和 Python 直接对话,让它听我们的指令。
第二阶段:学习魔法咒语(第 4 ~ 6 章)。 这一阶段开始学习 Python 的基本语法。第 4 章学习"变量",也就是怎么把信息存起来。第 5 章学习"条件判断",也就是让程序能根据不同情况做不同的事。第 6 章学习"循环",也就是让程序能反复做同一件事。这一阶段学完,你就能写一些简短但有逻辑的小程序了。
第三阶段:组合魔法阵(第 7 ~ 9 章)。 这一阶段把前面学过的"咒语"组合起来。第 7 章学习"列表"和"字典",让你可以一次管理很多个数据。第 8 章学习"函数",让你可以把一段代码打包起来反复使用。第 9 章学习"文件读写",让你可以让 Python 直接读取和修改电脑上的文件——这是办公自动化的基础。
第四阶段:实战办公自动化(第 10 ~ 13 章)。 这一阶段是本书最有"魔法感"的部分。第 10 章学习怎么用 Python 控制 Excel,让它自动合并、自动求和、自动生成图表。第 11 章学习怎么用 Python 自动发邮件。第 12 章学习怎么用 Python 自动整理文件、批量重命名、提取 PDF 内容。第 13 章学习怎么从网页上自动抓取需要的数据,比如天气、新闻、商品价格。
第五阶段:打造智能助手(第 14 ~ 15 章)。 第 14 章是一个综合项目,我们会把前面所有学过的知识组合起来,打造一个完整的"小明的智能办公助手"——它能读取爸爸的 Excel 表格,自动核对金额,自动发送邮件,自动归档文件。第 15 章是展望篇,我们会讨论编程思维在未来的价值,告诉小朋友们学完这本书之后还可以往哪些方向继续探索。
你不用急着一下子走完全部 15 章。本书每一章都是独立的,但又彼此联系。你只需要按顺序一章一章地读下去,每一章都认真完成课后的小练习,就能在不知不觉中走完这张地图。
---
1.6 正确的编程心态:与错误信息做朋友
在正式开始写代码之前,我们还有一件非常重要的事情要说——编程时的心态。
很多小朋友第一次写代码时,遇到屏幕上的红色报错信息就会紧张、沮丧,甚至想放弃。这是完全可以理解的情绪,但是这种情绪会阻碍你进步。所以,请允许我提前告诉你一个秘密:
> 每一行错误信息,都是魔法师写给你的提示,而不是责备。
当你写错了一段代码,Python 不会生气,也不会嘲笑你。它会耐心地把"它不理解的地方"用红色文字显示出来。这种红色文字在编程里叫作"报错信息",也叫"异常"或"错误堆栈"。它们长得吓人,可是如果你仔细看,就会发现 Python 几乎总是在告诉你三件事:
- **在哪里出的错?** 通常会显示一个文件名和一个行号,比如 `File "hello.py", line 3`。
- **错的是什么类型的错?** 比如 `SyntaxError`(语法错误,说明你写的不符合 Python 的语法规则)、`NameError`(名字错误,说明你用了一个 Python 不认识的变量名)、`TypeError`(类型错误,说明你把不同类型的东西混在一起用了)。
- **为什么会出错?** Python 通常会附上一句简短的英文解释,比如 `unexpected EOF while parsing`(解析时遇到了意外的结束),或者 `name 'x' is not defined`(名字 x 没有被定义)。
把这三件事弄清楚,你就已经解决了 80% 的错误。剩下的 20% 怎么办?把报错信息复制到搜索引擎里搜一下。记住我前面说过的话:Python 社区非常活跃,你遇到的任何错误,几乎都有人遇到过,也几乎都有人在网上写过解答。
还有一条非常重要的心态:写代码不是一次就完美的事情。真正的程序员写代码的过程,是"写一点、运行一点、发现错误、修改、再运行"的循环。这个循环在编程里有个可爱的名字,叫"调试循环"(Debug Loop)。它不是失败的标志,而是学习的过程。
所以从今天起,请允许自己犯错。允许自己写错字母、忘记冒号、把英文括号打成中文括号。允许自己第一次写出来的代码跑不通。允许自己在报错信息面前皱眉头、抓头发、叹一口气——然后再去查清楚原因,修改,再运行一次。
每修改一次错误,你就比昨天更懂 Python 一点。
这就是"魔法师学徒"应有的心态。
---
1.7 第一个魔法咒语:Hello, World!
讲到这里,你是不是已经迫不及待想要开始写第一段代码了?
让我们现在就来施展你的第一个魔法咒语。程序员有一个传统:在学习任何一门新语言时,第一个程序永远是让电脑打印出 `Hello, World!` 这两个单词。为什么要从这么简单的程序开始?因为它能让你确认三件事:
1. Python 已经成功安装到了你的电脑上; 2. 你知道怎么把代码输入到 Python 里; 3. 你能看懂 Python 的运行结果。
在第 2 章我们会详细教你如何在电脑上安装 Python。现在,我们先用一种更简单的方式来施展这个咒语——Python 交互式环境。Python 提供了一个可以让程序员"和电脑对话"的小窗口。在这个窗口里,你输入一行代码,按下回车,电脑就会立刻执行这一行代码并把结果显示出来。这种"输入一行、立刻得到一行结果"的方式,就像和魔法师面对面聊天一样直接。
下面是这个窗口的样子(`>>>` 是 Python 提示符,表示它在等你说话):
```python >>> print("Hello, World!") Hello, World! ```
看到了吗?你输入了 `print("Hello, World!")` 这一行,Python 立刻回答你:`Hello, World!`。这就是你的第一个魔法——你让电脑按照你的指令说出了两个字。
我们把这一行代码拆开看:
- `print` 是一个 Python 内置的"魔法动作",意思是"把后面的内容显示在屏幕上"。
- `("Hello, World!")` 是 `print` 这个动作的"对象",也就是要显示的内容。注意,两边的圆括号是英文的小括号,不是中文的