什么是自动化——让电脑替你干活
第 1 章:什么是自动化——让电脑替你干活
当100张照片堆在你面前
周一早上,小明打开妈妈的手机,准备把上周生日聚会的照片传到自己的平板电脑里。他数了数,一共98张照片,乱七八糟地混在一起,有些是拍糊了的,有些是重复的,还有些拍的是无关紧要的天花板。小明需要做这几件事:把清晰的照片挑出来、把重复的删掉、给每张照片按日期重命名、最后传到平板电脑上。
他开始手动操作。点开第一张照片,看看清晰不清晰,不清晰就删掉,清晰就保存。然后看第二张、第三张……第十张的时候,小明已经有点烦了。第五十张的时候,他开始打哈欠。第一百张的时候——等等,他发现自己漏掉了一张重复的,之前已经删过一张一模一样的了。
“太无聊了!”小明把手机扔到一边,“这种事电脑肯定比我做得好,为什么我要自己做?”
小明说得对。这种机械重复的工作,恰恰是计算机最擅长的事情。如果能让电脑来帮忙处理这些照片,小明就可以用省下来的时间去玩乐高了。
这就是我们今天要学习的主题——自动化。
---
什么是自动化
自动化的本质
自动化,简单来说,就是让计算机自动完成原本需要人工重复执行的任务。
让我们把这个定义拆开来看:
- **“原本需要人工执行”**:这些任务本来需要人一步一步去做
- **“重复执行”**:这些任务不是做一次就结束了,而是要重复很多遍
- **“自动完成”**:计算机会按照我们设定的规则,不知疲倦地执行
洗衣机是自动化的好例子。在没有洗衣机的时候,妈妈要用手搓衣服、洗干净、漂清、甩干,整个过程需要一直守在旁边。有了洗衣机,妈妈只需要把脏衣服放进去,倒点洗衣液,按下按钮,然后就可以去看电视了。洗衣机自动完成了洗衣的全部过程。
自动售货机也是自动化。你投进硬币,按下按钮,饮料就自动掉下来了。整个购买过程,从收钱、找零、出货,不需要任何店员参与,全部由机器自动完成。
智能音箱更是如此。你说“小爱同学,帮我定一个明天早上7点的闹钟”,音箱听到你的话,自动设置好闹钟。你不需要打开手机、找到时钟应用、设置时间,音箱帮你把这一连串的操作都自动搞定了。
回到小明整理照片的问题。如果我们能写一个程序,让电脑自动识别清晰的照片、自动跳过重复的图片、自动按日期重命名文件,那小明就不用一张一张地手工处理了。他只需要运行程序,然后等待结果——这,就是自动化编程要做的事情。
自动化和人工智能的区别
有些小朋友可能会问:“自动化听起来和人工智能差不多啊?”这个问题问得很好。
人工智能(AI)更侧重于让计算机模拟人类的智能行为,比如识别图片里的猫和狗、理解你说的话、自动驾驶汽车等。人工智能追求的是“像人一样思考和判断”。
自动化更侧重于让计算机按照预设的规则,高效、准确、不知疲倦地执行任务。自动化追求的是“比人做得更快更好”。
当然,两者有时候会结合在一起使用。比如现在很多照片整理软件,既能自动识别照片里的人脸(这是人工智能),又能自动按照人脸分类整理(这是自动化)。小明整理照片的例子中,识别清晰度、判断是否重复属于人工智能的范畴,按照规则自动处理照片则是自动化的范畴。
为什么我们需要自动化
让我们来算一笔时间账。假设小明手工整理98张照片,每张照片需要花30秒(包括打开、判断、保存的时间),那他需要:
$$98 \times 30 = 2940 \text{秒} = 49 \text{分钟}$$
将近一个小时!如果小明用程序来处理呢?程序读取一张照片、判断是否清晰、判断是否重复、重命名、保存——整个过程可能只需要0.1秒。那么处理全部98张照片只需要:
$$98 \times 0.1 = 9.8 \text{秒}$$
不到10秒钟!这就是自动化的威力。
自动化的价值可以总结为三个关键词:
第一,节省时间。 这是最直接的好处。同样的任务,程序执行的速度比人工快几十倍、几百倍,甚至几千倍。省下来的时间,你可以去做更有意义的事情。
第二,减少错误。 人会疲劳、会分心、会粗心。一天处理几百个文件,总有那么几次会点错按钮、输错名字。程序不会累,只要规则设定正确,每一次执行的结果都是一样的。
第三,提高效率。 自动化不只是把人工做的事做得更快,它还能做人工很难完成的事情。比如在100万张照片中找出所有包含“猫”的图片,人工做不了,但程序可以轻松搞定。
---
生活中的自动化魔法
家庭中的自动化设备
仔细看看你的家,你会发现自动化设备无处不在。
洗衣机是家庭自动化的经典代表。现代的洗衣机更是加入了人工智能,可以自动感知衣物的重量和材质,自动调节水量和洗涤时间,甚至可以连接手机app让你远程操控。
微波炉也是一个自动化设备。你只需要把食物放进去,设置加热时间和火力,微波炉就会自动工作。到时间了,它会自动停止,还会发出提示音。
扫地机器人是近几年的新发明。它会自动在家里走来走去,遇到障碍物会转向,电量低了会自己回去充电。它甚至能记住你家的布局,画出房间地图,下次打扫的时候走最优路线。
智能空调也很神奇。你说“把空调调到26度”,空调就自动调整温度。如果它检测到房间里没人,还会自动进入节能模式。你不需要手动操作,一切都自动进行。
公共场所的自动化系统
走出家门,公共场所的自动化更是让你目不暇接。
地铁闸机是自动化的典型应用。你把交通卡往感应区一放,闸机自动读取卡片信息,判断余额是否充足。如果充足,闸机自动打开让你通过;如果余额不足,闸机保持关闭。整个过程不到一秒钟,每天服务成千上万的乘客。
银行ATM机让你不用去柜台就能取钱。插卡、输入密码、输入金额、取钱,机器自动核实身份、扣减余额、吐出钞票。24小时不打烊,全年无休。
快递分拣中心的自动化程度更高。上万件包裹在传送带上飞速通过,摄像头自动识别条形码,计算机自动计算最优的分拣路径,机械臂自动把包裹推到对应的格口。一个小时能处理十几万件快递,效率惊人。
超市的自助结账机让你自己就能完成购物结算。扫描商品、装袋、付款,全都可以在机器上自助完成,不用排队等收银员。
看不见的自动化
有些自动化更加隐蔽,藏在各种服务的背后。
当你打开短视频app,系统会自动推荐你可能喜欢的内容。这些推荐不是人工挑选的,而是程序根据你之前的观看记录,自动分析你的喜好,然后自动推送相关视频。
当你网购时,系统会自动判断你的收货地址、推荐相关商品、计算最优物流路线。下单后,仓库里的自动分拣系统会找到你的商品、打包、发货。
当你玩网络游戏时,对手可能是人工智能控制的“电脑玩家”。这些电脑玩家会根据你的操作自动做出反应,让你感觉像在和真人对战。
我们生活在一个被自动化包围的世界里。 理解自动化的工作原理,能帮助我们更好地理解这些技术,也能让我们学会利用自动化来改善自己的生活。
---
程序的灵魂:输入、处理、输出
三个最基本的概念
无论多么复杂的程序,归根结底都在做三件事:输入、处理、输出。
- **输入**:接收外界的信息或数据
- **处理**:按照规则对信息进行加工
- **输出**:把处理后的结果呈现出来
让我们用具体的例子来理解这三个概念。
微波炉的输入是你设定的火力和时间,处理是微波炉内部的磁控管产生微波加热食物,输出是热好的食物。洗衣机的输入是脏衣服和洗衣液,处理是滚筒转动、水流冲刷、甩干等步骤,输出是洗干净的衣服。地铁闸机的输入是你的交通卡,处理是计算机检查余额是否充足,输出是闸机的开或关。
程序的运行机制也是一样的。让我们回到小明整理照片的例子:
```mermaid graph LR A[输入:98张照片] --> B[处理:识别清晰度<br/>判断是否重复<br/>按日期重命名] B --> C[输出:整理好的照片] ```
输入是杂乱的照片文件。处理是程序按照我们编写的规则,对每张照片进行分析和处理。输出是整理好的、有序的、清晰不重复的照片。
为什么这个模型很重要
把程序分解为输入、处理、输出三个部分,是编程思考的基本方式。
当你准备写一个程序之前,首先要想清楚三件事:
1. 程序的输入是什么? 数据从哪里来?是用户输入的文字?是读取的文件?是网络获取的信息? 2. 程序要做什么处理? 输入的数据要经过哪些步骤才能变成想要的结果? 3. 程序的输出是什么? 处理完成后,结果以什么形式呈现?是显示在屏幕上?是保存到文件?还是发送给其他人?
想清楚这三个问题,程序的大框架就出来了。
打个比方,做一道番茄炒蛋:
- **输入**:番茄、鸡蛋、调料
- **处理**:切菜、打蛋、热油、翻炒、加调料
- **输出**:一盘香喷喷的番茄炒蛋
做其他菜也是一样的道理。输入食材,经过烹饪处理,输出成品。程序设计也是如此,无论功能多复杂,都可以拆解为这三个基本环节。
第一个小目标:问候机器人
现在,让我们把目光投向本章的实践目标:制作一个问候机器人。
这个程序的需求很简单:
- 根据当前的时间,自动判断是早上、下午还是晚上
- 输出对应的问候语
按照输入、处理、输出的框架来分析:
- **输入**:当前时间(小时数)
- **处理**:
- 如果小时数在0到11之间,是上午
- 如果小时数在12到17之间,是下午
- 如果小时数在18到23之间,是晚上
- **输出**:在屏幕上显示"早上好"、"下午好"或"晚上好"
这个程序能帮助我们理解程序的运行逻辑,也是一个非常有用的基础模块。以后我们写的很多程序,都需要根据时间段来执行不同的操作。
---
Python:自动化编程的首选语言
为什么选择Python
编程语言有很多种,为什么这本书选择教大家用Python来实现自动化呢?
第一,Python 简洁易学。 如果用其他语言(比如Java或C++)来实现同样的功能,代码可能需要写很长很复杂。但Python可以用很少的代码表达清晰的意思,非常适合初学者入门。
比如,同样是打印一行文字:
- Java需要写:
```java public class Hello { public static void main(String[] args) { System.out.println("Hello"); } } ```
- Python只需要写:
```python print("Hello") ```
第二,Python 功能强大。 虽然Python语法简单,但它能做的事情可一点都不简单。从网页开发、数据分析、人工智能到自动化办公,Python都能胜任。
第三,Python 生态丰富。 所谓生态,就是指围绕Python形成的工具和资源库网络。全世界的程序员为Python开发了无数现成的工具包,如果你想读取Excel文件,有专门的工具包;如果你想发送邮件,有专门的工具包;如果你想处理图片,也有专门的工具包。你不需要从零开始,很多工作只需要调用现成的工具就能完成。
第四,Python 在自动化领域特别流行。 这是最重要的一点。Python有大量专门为自动化场景设计的工具和库,无论是文件处理、数据报表、邮件管理还是网页爬虫,Python都有成熟好用的解决方案。
Python能做什么自动化
Python可以实现的自动化场景非常广泛:
文件处理自动化:
- 批量重命名文件
- 自动分类整理文件夹
- 压缩和解压文件
- 批量转换图片格式
数据处理自动化:
- 读取和生成Excel表格
- 处理CSV数据文件
- 生成数据报表
- 数据分析和可视化
办公自动化:
- 自动发送邮件
- 生成PDF文档
- 批量处理Word文档
- 定时执行任务
网络自动化:
- 自动抓取网页信息
- 批量下载文件
- 自动填写网页表单
- 监测网站更新
在接下来的章节中,我们会逐一学习这些自动化技能。
---
动手实践:创建你的第一个问候机器人
准备工作
在开始编程之前,我们需要准备好Python的运行环境。
首先,访问Python的官方网站 `https://www.python.org`,下载最新版本的Python安装包。安装过程中,记得勾选"Add Python to PATH"选项,这样可以在命令行中方便地运行Python。
安装完成后,我们还需要一个编写代码的工具。对于初学者来说,VS Code是一个很好的选择。它是微软开发的免费编辑器,支持Python语法高亮和代码提示,非常适合编程学习。
安装好VS Code后,再安装Python插件: 1. 打开VS Code 2. 点击左侧的扩展图标(四个方块) 3. 在搜索框中输入"Python" 4. 找到微软官方出品的Python插件,点击安装
现在,你的编程环境就准备好了。
编写问候程序
打开VS Code,新建一个文件,命名为`greeting.py`。`.py`是Python文件的扩展名,表示这是一个Python程序。
现在,让我们一步步编写问候机器人的代码。
第一步:获取当前时间
Python内置了一个叫做`datetime`的模块,可以帮我们获取当前的时间信息。
```python
导入datetime模块
import datetime
获取当前时间
now = datetime.datetime.now()
获取当前的小时数
current_hour = now.hour
打印出来看看
print("当前时间是:", current_hour, "点") ```
运行这段代码,你会看到类似这样的输出:
``` 当前时间是: 14 点 ```
`datetime.datetime.now()`返回的是当前的日期和时间,`.hour`属性可以单独提取出小时数。
第二步:根据时间判断问候语
接下来,我们需要根据小时数来判断应该输出什么问候语。
```python
根据时间判断问候语
if current_hour < 12: greeting = "早上好" elif current_hour < 18: greeting = "下午好" else: greeting = "晚上好"
print(greeting) ```
这里的`if`、`elif`、`else`是什么意思呢?
- `if`是“如果”的意思。如果当前小时数小于12,说明是上午,执行`greeting = "早上好"`
- `elif`是“否则如果”的意思。如果上一个小条件不满足,但当前小时数小于18,说明是下午,执行`greeting = "下午好"`
- `else`是“否则”的意思。如果前面的条件都不满足,那只能是晚上了,执行`greeting = "晚上好"`
第三步:完整的问候程序
把上面的代码整合起来,就是一个完整的问候机器人:
```python
问候机器人 v1.0
根据当前时间自动输出问候语
import datetime
获取当前时间
now = datetime.datetime.now() current_hour = now.hour
根据时间判断问候语
if current_hour < 12: greeting = "早上好" elif current_hour < 18: greeting = "下午好" else: greeting = "晚上好"
输出问候语
print(greeting) ```
运行程序,在上午你会看到"早上好",下午会看到"下午好",晚上会看到"晚上好"。
让问候更有趣
问候机器人已经能正常工作了。让我们再升级一下,让它更有趣。
```python
问候机器人 v2.0
带有个性化问候的版本
import datetime
获取当前时间
now = datetime.datetime.now() current_hour = now.hour
根据时间判断问候语
if current_hour < 6: greeting = "凌晨好,夜猫子!" elif current_hour < 12: greeting = "早上好,新的一天开始了!" elif current_hour < 14: greeting = "中午好,该吃午饭了吗?" elif current_hour < 18: greeting = "下午好,继续加油!" else: greeting = "晚上好,好好休息!"
输出问候语
print(greeting) ```
这个版本对不同的时间段做了更细致的划分,中午12点到下午2点之间会问“该吃午饭了吗”,晚上会祝你好好休息。
理解程序的执行流程
让我们用流程图来看看程序是如何运行的:
```mermaid graph TD A[开始] --> B[获取当前时间] B --> C{小时 < 6?} C -->|是| D[凌晨好,夜猫子!] C -->|否| E{小时 < 12?} E -->|是| F[早上好,新的一天开始了!] E -->|否| G{小时 < 14?} G -->|是| H[中午好,该吃午饭了吗?] G -->|否| I{小时 < 18?} I -->|是| J[下午好,继续加油!] I -->|否| K[晚上好,好好休息!] D --> L[打印问候语] F --> L H --> L J --> L K --> L L --> M[结束] ```
你看,程序按照我们设定的规则,一步一步地执行,最终输出合适的问候语。
调试小技巧
编程过程中难免会遇到错误,这里有几个调试的小技巧:
语法错误:Python会告诉你哪一行出了问题,比如拼写错误、少了括号或引号。仔细看错误提示,它会告诉你问题大概在哪里。
逻辑错误:程序能运行,但结果不对。这时候可以用`print`语句把中间变量的值打印出来,看看是不是哪里的判断条件写错了。
善用注释:在代码前面加上`#`,后面的内容就是注释,程序不会执行。注释可以用来解释代码的作用,方便自己和别人理解。
```python
这是一行注释,不会被执行
print("Hello") # 这行代码会执行 ```
---
本章小结
通过这一章的学习,我们已经迈出了编程世界的第一步。