if...else 语句根据条件是 True 还是 False 执行不同的套件:
上面的代码段中的条件为 True ,因此 if 套件显示 'Passed' 。需要注意的是,当键入 print ( 'Passed' )后按Enter键时,IPython会将下一行缩进四个空格。必须删除这四个空格,以便“ else: ”套件可以在 if 的字母 i 下正确对齐。
下面的代码将 57 赋值给变量 grade ,然后再次执行 if...else 语句,执行结果说明,条件为 False 时只执行 else 的套件:
使用向上和向下箭头键可以在交互式会话的当前代码段中向后或向前导航,按Enter键可以重新执行选中的代码段。现在,我们将 grade 赋值为 99 ,按两次向上箭头键导航到代码段 [4] ,然后按Enter键重新执行该代码段。因为每个被执行的代码段都会获得一个新的ID,因此,该代码段将显示为 [6] ,如下所示:
条件表达式
有时, if...else 语句中的套件可以根据条件为变量赋不同的值,如下所示:
然后我们可以评估这个变量或者用 print 输出这个变量,如下所示:
代码段 [8] 的语句可以改写为简洁的 条件表达式 ,如下所示:
上面的代码段中的括号不是必需的,但它们能清晰地表明该语句将条件表达式的值赋给了 result 。首先,Python评估条件 grade >= 60 :
在交互模式下,还可以直接评估条件表达式,如下所示:
套件中的多条语句
下面的代码中, if...else 语句的 else 套件包含两条语句:
上面的代码段中的 grade 小于 60 ,因此 else 套件中的 两条 语句都会被执行。
如果第二个 print 没有进行缩进,那么它将不被包含在 else 的套件中。因此,无论 if 语句的条件是 True 还是 False ,该条语句 都会 被执行,这可能会导致错误的输出:
if...elif...else 语句
可以使用 if...elif...else 语句测试多种情况。下面的代码段中,等级 A 表示 grade 大于等于 90 ,等级 B 表示 grade 为80~89,等级 C 表示 grade 为70~79,等级 D 表示 grade 为60~69,而等级 F 表示其他成绩。在这几个条件中,仅执行第一个值为 True 的条件控制的操作。代码段 [18] 显示结果为 C ,因为 grade 的值是 77 :
第一个条件 grade>=90 为 False ,因此跳过语句 print('A') 。第二个条件 grade>=80 也是 False ,语句 print('B') 也被跳过。第三个条件 grade>=70 为 True ,因此执行语句 print('C') 。然后跳过 if...elif...else 语句中的所有剩余代码。 if...elif...else 语句的执行速度比单独执行多个 if 语句的速度更快,因为当条件为 True 时,会立即终止测试。
else 是可选项
if...elif...else 语句中的 else 是可选项。包含 else 可以使代码处理不满足 任何 条件的值。当没有 else 的 if...elif 语句中的条件全部都为 False 时,程序不会执行任何语句套件,而是直接执行 if...elif 语句后的下一条语句。如果在 if...elif 语句中包含 else ,则必须把它放在最后一个 elif 之后 ;否则,会引发 SyntaxError 。
逻辑错误
代码段 [16] 中错误地使用缩进是一个 非致命逻辑错误 的示例。这个代码段可以执行,但会产生错误的结果。如果 脚本中存在致命的逻辑错误 ,会引发异常(例如尝试除以0会引发 ZeroDivisionError ),Python会显示回溯,然后终止脚本。 交互模式中的致命错误 仅终止当前代码段,然后IPython会等待下一个输入。