条件判断:让机器人会"看情况"
变量能记住东西之后,下一步是让它根据情况选一条路走。
学习目标
- 说清"顺序结构"和"选择结构"的区别,遇到"看情况"的任务会想到分支
- 在流程图上用"判断"组件分叉,说清"是""否"两条箭头各通向哪里
- 用
If / ElseIf / Else / End If写多分支逻辑,并记住 BotScript 没有Then - 用比较与逻辑运算符写出正确的条件表达式,分清
=的两重含义 - 记住考点:"判断"组件的条件只能用流程图变量;会用系统变量"上一条命令的结果"
- 在多个固定值之间选择时,能读懂并会写
Select Case
预计用时:读课 30 分钟 + 上机 25 分钟 | 前置知识:第 2 课(界面与两种视图)、第 3 课(变量与数据类型) | 本课性质:语法课(认证选择题与实操都常考),需要动手画流程图
知识地图
第 3 课让机器人记得住(变量),本课让机器人会挑路(分支),下一课再让它会重复(循环)。记住、挑路、重复——这三件事凑齐,机器人就能处理绝大多数办公流程。
If / ElseIf / Else / End If(无 Then);"判断"组件的两条箭头;条件表达式的写法。= 什么时候是赋值、什么时候是判断。If。一、为什么需要判断
前面几节的流程都是一条道走到黑:从上一步执行到下一步,中间没有岔路。这种"从头排到尾"的结构,官方叫顺序结构。
可现实里机器人常常要"看情况":金额大于 1000 就审批,否则直接通过;文件存在就打开,否则先创建。 这种"根据条件走不同路"的结构,官方称为选择结构(分支结构)。[1]
| 结构 | 生活里的样子 | 流程里的样子 |
|---|---|---|
| 顺序结构 | 照着菜谱第 1、2、3 步做下去 | 一条直线,走完一步走下一步 |
| 选择结构 | 走到路口,看红绿灯决定直行还是等 | 遇到"判断"就分叉,只走其中一条 |
为什么必须由人把"条件"写清楚?因为机器人没有理解能力。它不知道"这笔单子看起来可疑"是什么意思,但它完全能执行"如果金额大于 1000,就走左边"——条件是死的、能算的,它就能判断。所以分支的本质,是人把"怎么算"提前写好,机器人负责照着算。
一句话记忆:顺序结构是"一直往前",选择结构是"到岔路口看条件挑一条"。判断组件就是那个岔路口。
二、流程图上的"判断"组件
把"判断"组件拖到画布上,它有两条出箭头:是(条件为真时走)和 否(条件为假时走)。
选中该组件,在属性区填"条件表达式"。这里有个考点:条件表达式里只能使用流程图变量(前两课里在流程视图右侧"变量"标签定义的那种)。[1]
为什么只能流程图变量?可以这样理解作用范围:流程图变量像贴在画布旁边的"公告栏",整张流程图上的每个组件都能看到它;而流程块变量像某个流程块"私人口袋里的纸条",出了这个块别人就看不见了。判断组件站在流程图上、要替整条流程做决定,它只能读公告栏上的东西——所以只认流程图变量。
2.1 在流程图里怎么连
- 在流程视图右侧的"变量"标签里,先定义一个流程图变量(例如
金额),先给它一个初始值。 - 从组件区拖一个流程块到画布,用
变量赋值命令给金额赋值(例如1200)。 - 再拖一个 判断 组件,在属性区"条件表达式"填
金额 > 1000。 - 从判断的"是"箭头连到一个输出"需要审批"的流程块;从"否"箭头连到输出"直接通过"的流程块。
- 点工具栏的运行,看机器人走了哪条箭头;回到赋值处把
1200改成800再跑一次,确认它改走另一条。
把"判断"和箭头组合起来,就能表达编程里所有分支:条件成立走一条路,不成立走另一条。这是流程图只靠四种组件就能搭出复杂逻辑的关键。
易错点:在判断组件的条件表达式里填了一个只在流程块内部定义的变量,会遇到"变量找不到"之类的报错。别急着怪软件——先回到流程视图右侧,把它定义成流程图变量。这就是上面那条考点在实战里的样子。
三、源代码里的 If:注意没有 Then
BotScript 的条件分支和很多语言(比如 VB 的 If ... Then)不一样:不写 Then,条件是单独一行,块尾用 End If。[2]
If 条件
语句块1
End If
If 条件
语句块1
Else
语句块2
End If
If 条件1
语句块1
ElseIf 条件2
语句块2
Else
语句块3
End If
执行规则:从上往下逐个检查条件,第一个为真的分支执行;都不满足才走 Else。
Dim 金额 = 1200
If 金额 > 1000
输出调试信息("需要审批")
ElseIf 金额 > 500
输出调试信息("主管确认")
Else
输出调试信息("直接通过")
End If
逐行读一遍:
- 把
1200放进变量金额。 - 先问:
1200 > 1000吗?成立,于是执行紧跟着的那句,输出"需要审批"。 - 既然第 2 步已经命中,后面的
ElseIf和Else看都不看,直接跳到End If之后。
为什么 ElseIf 的顺序很重要?因为规则是"第一个为真就收工"。如果把 金额 > 500 写在 金额 > 1000 前面,那么 1200 会先满足"大于 500",直接输出"主管确认",永远轮不到"需要审批"。所以:越严格的条件,越要写在前面。
易错点(两条):① 习惯性写成 If 金额 > 1000 Then——BotScript 没有 Then,多写会报错;② 忘了写 End If,机器人在源代码视图里会一直提示缺结尾。把 If ... End If 当成一对括号来记,就不会漏。
四、条件表达式怎么写
条件就是一个表达式,它的值应该是布尔型(True / False);如果不是,平台会自动转换成布尔型。[3]
| 类别 | 运算符 | 例子 |
|---|---|---|
| 比较 | = 相等 · <> 不等 · < <= > >= | 金额 >= 500 |
| 逻辑 | And 与 · Or 或 · Not 非 | 年龄 >= 18 And 城市 = "北京" |
4.1 逻辑运算符用"且、或、非"来读
And(与):两边都为真,整体才为真。像"既年满 18,又在北京"——差一条就不算。Or(或):只要一边为真,整体就为真。像"刷卡或付现",随便满足一种就行。Not(非):把真假反过来。Not 已完成意思是"还没完成"。
一条条件里同时用到 And 和 Or 时容易看糊涂。稳妥的做法:先把每一步算成一个中间变量(比如 条件一 = 年龄 >= 18),再把这些变量用逻辑运算符组合起来。变量名本身就是注释,读起来比一长串括号清楚得多。
4.2 = 的两重含义
提醒:条件里写 金额 = 500 是"判断是否等于",不是赋值——同一个符号,单独成句才是赋值。[2]
| 写法 | 含义 | 怎么读它 |
|---|---|---|
金额 = 500(单独一行) | 赋值:把 500 装进 金额 | "让金额等于 500" |
If 金额 = 500 | 判断:金额是不是 500? | "如果金额等于 500" |
为什么同一个符号能干两件事?因为机器看的是它出现在什么位置:出现在条件、表达式里,就问"相等吗";出现在一条语句的开头,就是"把右边存进左边"。区分办法很简单——看有没有 If(或其它判断场景)在前头。
4.3 偷个懒:用系统变量"上一条命令的结果"
实用技巧:很多命令运行后会把结果留下,你可以用系统变量"上一条命令的结果"当条件。这样"上一步成功了吗"就能直接拿来判断,不必自己额外定义变量。
什么时候会用到它?比如某个命令去打开文件、或者从网页抓一个值,你想紧接着判断"上一步成功没有",就不用先 Dim 结果 = ... 再判断,直接把这个系统变量填进条件的判断位置即可。它是平台替你维护的"最近一次结果",省掉一个临时变量。
五、进阶:多重等值判断用 Select Case
如果是在很多个固定值里挑一个(比如按月份给天数),用 Select Case 比一长串 ElseIf 更清楚:
Select Case 月份
Case 1, 3, 5, 7, 8, 10, 12
天数 = 31
Case 4, 6, 9, 11
天数 = 30
Case Else
天数 = 28
End Select
逐行读:把 月份 的值拿出来,从上往下一组一组地对:是 1、3、5、7、8、10、12 里的一员吗?是就把天数设为 31;不是就再对下一组;都不匹配才走 Case Else。整段用 End Select 收尾。
什么时候用 Select Case?判断的是同一个值等于哪几个固定选项之一时用它,读起来像一张对照表;一旦条件里出现范围比较(>、<)或不同变量,就回到 If / ElseIf。本节先知道它存在、能读懂即可;语法细节已收进速查页。
完整语法见 参考页:BotScript 变量与类型速查(已补入逻辑语句一节)。
Python 写法对照:判断的逻辑一模一样,形式差别只有两点——冒号和缩进,
而且没有 End If 这类结束标记。
| 要做的 | BotScript(本课程主线) | Python |
|---|---|---|
| 二选一 | If 条件 … Else … End If | if 条件: … else:(靠缩进划分范围) |
| 多路判断 | If / ElseIf / Else | if / elif / else |
| 多选一 | Select Case x / Case 1, 3 / Case Else / End Select | match x: / case 1 | 3: / case _:(需 Python 3.10 以上,本课程用的 3.12 支持) |
| 判断相等 | If 金额 = 500 | if 金额 == 500 |
| 并且 / 或者 / 取反 | And / Or / Not | and / or / not(小写) |
两个容易踩的地方:① 相等要写双等号。本课讲过"金额 = 500 单独成句是赋值、写在条件里是判断",
这是 BotScript 的规则;Python 里判断相等必须写 ==,写单个 = 会直接语法报错——
这其实是好事,比默默算错强。② And/Or/Not 在 Python 里要小写,
这跟第 5 课的 Break 一样,是抄过去之后最容易被忽略的地方。
本课小结
必记要点
- 顺序结构 = 一直往前;选择结构(分支)= 到岔路口看条件挑一条。
- 流程图上的"判断"组件有是和否两条箭头:条件为真走"是",为假走"否"。
- 考点:判断组件的条件表达式只能使用流程图变量。
- BotScript 的
If不写Then,块尾用End If;ElseIf / Else可选。 - 多分支"第一个为真就收工",所以越严格的条件越往前放。
=单独成句是赋值,出现在条件里是判断相等;不等用<>。
自测
不看上面,凭记忆作答。答错不要紧,解析会告诉你为什么。
上机实践(回到 Windows)
任务 A(定义流程图变量):新建一张流程图,在流程视图右侧"变量"标签里定义流程图变量 金额。用 变量赋值 命令先给它赋 1200。预期:变量列表里能看到 金额。
任务 B(连出两条路):从组件区拖一个 判断 组件到画布,条件表达式填 金额 > 1000。"是"箭头连一个流程块,里面用 输出调试信息 输出"需要审批";"否"箭头连另一个流程块,输出"直接通过"。常见报错:条件里提示变量找不到——说明 金额 没定义成流程图变量,回任务 A 检查。
任务 C(验证分支):点工具栏运行,确认输出的是"需要审批"。再把 金额 改成 800 重跑,确认改走"否"、输出"直接通过"。这一步是"眼见为实",务必看到两次不同的结果。
任务 D(看平台生成了什么):切到源代码视图,看看平台替你把判断生成成什么样,发我核对——特别留意它有没有 Then。你应该看到条件单独一行、块尾是 End If。
任务 E(故意制造报错):在源代码视图里,手动在 If 金额 > 1000 后面加上 Then,运行一次,把报错信息原样发我。认识"多了 Then"这类报错,比背十遍规则都管用。
任务 F(挑战):把任务 B 的三档改成"金额 > 1000 需要审批;金额 > 500 主管确认;否则直接通过",分别用 1200、800、200 跑三次,确认三条路各走一次。
精读一手来源
本节首选:《BotScript 语言参考 · 逻辑语句》(条件分支、选择分支)。 想看可视化的"判断"怎么连,读 《基本概念 · 复杂流程图的实现》。 条件的结果与布尔转换,见 《附录:编程基础知识》。