第 4 课 · 第三部分 基础语法

条件判断:让机器人会"看情况"

变量能记住东西之后,下一步是让它根据情况选一条路走。

学习目标

预计用时:读课 30 分钟 + 上机 25 分钟 |  前置知识:第 2 课(界面与两种视图)、第 3 课(变量与数据类型) |  本课性质:语法课(认证选择题与实操都常考),需要动手画流程图

知识地图

第 3 课让机器人记得住(变量),本课让机器人会挑路(分支),下一课再让它会重复(循环)。记住、挑路、重复——这三件事凑齐,机器人就能处理绝大多数办公流程。

本课在哪儿
第三部分 · 基础语法。第 3 课(变量)之后、第 5 课(循环)之前,是"让流程活起来"的第一步。
重点
If / ElseIf / Else / End If(无 Then);"判断"组件的两条箭头;条件表达式的写法。
难点
条件表达式只能用流程图变量(考点);= 什么时候是赋值、什么时候是判断。
学完的标志
给你一句"金额大于 1000 就审批,否则直接通过",你能在流程图上连出两条路,并在源代码视图里读懂平台生成的 If。

一、为什么需要判断

前面几节的流程都是一条道走到黑:从上一步执行到下一步,中间没有岔路。这种"从头排到尾"的结构,官方叫顺序结构。

可现实里机器人常常要"看情况":金额大于 1000 就审批,否则直接通过;文件存在就打开,否则先创建。 这种"根据条件走不同路"的结构,官方称为选择结构(分支结构)。[1]

结构生活里的样子流程里的样子
顺序结构照着菜谱第 1、2、3 步做下去一条直线,走完一步走下一步
选择结构走到路口,看红绿灯决定直行还是等遇到"判断"就分叉,只走其中一条

为什么必须由人把"条件"写清楚?因为机器人没有理解能力。它不知道"这笔单子看起来可疑"是什么意思,但它完全能执行"如果金额大于 1000,就走左边"——条件是死的、能算的,它就能判断。所以分支的本质,是人把"怎么算"提前写好,机器人负责照着算。

一句话记忆:顺序结构是"一直往前",选择结构是"到岔路口看条件挑一条"。判断组件就是那个岔路口。

二、流程图上的"判断"组件

把"判断"组件拖到画布上,它有两条出箭头:是(条件为真时走)和 否(条件为假时走)。

判断:条件表达式
── 是 ──▶ 条件为真走这边── 否 ──▶ 条件为假走这边

选中该组件,在属性区填"条件表达式"。这里有个考点:条件表达式里只能使用流程图变量(前两课里在流程视图右侧"变量"标签定义的那种)。[1]

为什么只能流程图变量?可以这样理解作用范围:流程图变量像贴在画布旁边的"公告栏",整张流程图上的每个组件都能看到它;而流程块变量像某个流程块"私人口袋里的纸条",出了这个块别人就看不见了。判断组件站在流程图上、要替整条流程做决定,它只能读公告栏上的东西——所以只认流程图变量。

2.1 在流程图里怎么连

  1. 在流程视图右侧的"变量"标签里,先定义一个流程图变量(例如 金额),先给它一个初始值。
  2. 从组件区拖一个流程块到画布,用 变量赋值 命令给 金额 赋值(例如 1200)。
  3. 再拖一个 判断 组件,在属性区"条件表达式"填 金额 > 1000。
  4. 从判断的"是"箭头连到一个输出"需要审批"的流程块;从"否"箭头连到输出"直接通过"的流程块。
  5. 点工具栏的运行,看机器人走了哪条箭头;回到赋值处把 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

逐行读一遍:

  1. 把 1200 放进变量 金额。
  2. 先问:1200 > 1000 吗?成立,于是执行紧跟着的那句,输出"需要审批"。
  3. 既然第 2 步已经命中,后面的 ElseIf 和 Else 看都不看,直接跳到 End If 之后。
If、ElseIf、Else 从上往下判断,第一个成立的分支执行,后面的分支跳过 从上往下判断,走第一条成立的路 例子:金额 = 1200;条件越严格,越要写在前面。 开始 · 金额 = 1200 金额 > 1000 ? 是 需要审批 否 金额 > 500 ? 是 主管确认 否 直接通过 第一个成立的分支执行后,后面的 ElseIf / Else 直接跳过;BotScript 不写 Then,用 End If 收尾。
图 2 · 三个分支只会命中一个:从上往下,第一个条件成立就执行,后面的分支不再检查。

为什么 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 和 Or 时容易看糊涂。稳妥的做法:先把每一步算成一个中间变量(比如 条件一 = 年龄 >= 18),再把这些变量用逻辑运算符组合起来。变量名本身就是注释,读起来比一长串括号清楚得多。

4.2 = 的两重含义

提醒:条件里写 金额 = 500 是"判断是否等于",不是赋值——同一个符号,单独成句才是赋值。[2]

写法含义怎么读它
金额 = 500(单独一行)赋值:把 500 装进 金额"让金额等于 500"
If 金额 = 500判断:金额是不是 500?"如果金额等于 500"

为什么同一个符号能干两件事?因为机器看的是它出现在什么位置:出现在条件、表达式里,就问"相等吗";出现在一条语句的开头,就是"把右边存进左边"。区分办法很简单——看有没有 If(或其它判断场景)在前头。

4.3 偷个懒:用系统变量"上一条命令的结果"

实用技巧:很多命令运行后会把结果留下,你可以用系统变量"上一条命令的结果"当条件。这样"上一步成功了吗"就能直接拿来判断,不必自己额外定义变量。

什么时候会用到它?比如某个命令去打开文件、或者从网页抓一个值,你想紧接着判断"上一步成功没有",就不用先 Dim 结果 = ... 再判断,直接把这个系统变量填进条件的判断位置即可。它是平台替你维护的"最近一次结果",省掉一个临时变量。

五、进阶:多重等值判断用 Select Case

如果是在很多个固定值里挑一个(比如按月份给天数),用 Select Case 比一长串 ElseIf 更清楚:

Select Case
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 Ifif 条件: … else:(靠缩进划分范围)
多路判断If / ElseIf / Elseif / elif / else
多选一Select Case x / Case 1, 3 / Case Else / End Selectmatch x: / case 1 | 3: / case _:(需 Python 3.10 以上,本课程用的 3.12 支持)
判断相等If 金额 = 500if 金额 == 500
并且 / 或者 / 取反And / Or / Notand / or / not(小写)

两个容易踩的地方:① 相等要写双等号。本课讲过"金额 = 500 单独成句是赋值、写在条件里是判断", 这是 BotScript 的规则;Python 里判断相等必须写 ==,写单个 = 会直接语法报错—— 这其实是好事,比默默算错强。② And/Or/Not 在 Python 里要小写, 这跟第 5 课的 Break 一样,是抄过去之后最容易被忽略的地方。

本课小结

必记要点

选择结构 看情况走不同路 分支结构 选择结构的别称 判断组件 流程图里分叉的岔路口 条件表达式 结果为真或假的式子 流程图变量 全流程图能看到的变量 End If 条件块的收尾 Select Case 多重等值分支

自测

不看上面,凭记忆作答。答错不要紧,解析会告诉你为什么。

上机实践(回到 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 语言参考 · 逻辑语句》(条件分支、选择分支)。 想看可视化的"判断"怎么连,读 《基本概念 · 复杂流程图的实现》。 条件的结果与布尔转换,见 《附录:编程基础知识》。