3.1 分支结构
3.1.1 单分支结构
Python 的单分支结构使用 if 保留字对条件进行判断,使用方式如下:
if <条件>:
<语句块>
<语句块> 是 if 条件满足后执行的一个或多个语句序列,缩进表达 <语句块> 与 if 的包含关系。<条件> 是一个产生 True 或 False 结果的语句,当结果为 True 时,执行 <语句块>,否则跳过 <语句块>。
3.1.2 二分支结构
Python 的二分支结构使用 if-else 保留字对条件进行判断,语法格式如下:
if <条件>:
<语句块 1>
else:
<语句块 2>
<语句块 1> 在 if 中 <条件> 满足即为 True 时执行,<语句块 2> 在 if 中 <条件> 不满足即为 False 时执行。简单来说,二分支结构根据条件的 True 或 False 结果产生两条路径。
二分支结构还有一种更简洁的表达方式,适合 <语句块 1> 和 <语句块 2> 都只包含简单表达式的情况,语法格式如下:
<变量> = <表达式 1> if <条件> else <表达式 2>
如果 <条件> 为 True,则将 <表达式 1> 的结果赋值给 <变量>,否则将 <表达式 2> 的结果赋值给 <变量>。
first_num = eval(input('请输入第一个数:'))
second_num = eval(input('请输入第二个数:'))
bigger_num = first_num if first_num >= second_num else second_num
print(f'较大的数是{bigger_num}。')
------------------------------------------------------------------------
请输入第一个数:50
请输入第二个数:25
较大的数是50。
3.1.3 多分支结构
Python 的 if-elif-else 用于描述多分支结构,语句格式如下:
if <条件 1>:
<语句块 1>
elif <条件 2>:
<语句块 2>
…
else:
<语句块 n>
多分支结构通常用于判断同一个条件或一类条件的多个执行路径。Python 会按照多分支结构的代码顺序依次评估判断条件,寻找并执行第一个结果为 True 的条件所对应的语句块。当 if-elif-else 中的某个语句块执行后,Python 就会跳过整个 if-elif-else 结构。即使后续的条件测试为真,其对应的语句块也不会被执行。
此外,Python 并不要求 if-elif 结构后面的代码必须有 else 代码块。else 代码块是一个包罗万象的语句,只要不满足任何 if 或 elif 中的条件测试,else 中的代码就会被执行。这可能会引入无效甚至恶意的数据。如果知道最终要测试的条件,应考虑使用一个 elif 代码块代替 else 代码块。这样就可以肯定,仅当满足相应的条件时,代码才会执行。
3.1.4 条件判断及组合
分支结构中的条件判断可以使用任何能够产生 True 或 False 的语句或函数。形成判断条件最常见的方式是采用关系操作符:<
、<=
、>
、>=
、==
、!=
。
Python 语言中,任何非零的数值、非空的数据类型都等价于 True,0 或空类型等价于 False,它们可以直接用作判断条件。
Python 语言使用保留字 not、and 和 or 对条件进行逻辑运算或组合。保留字 not 表示单个条件的“否”关系,and 表示多个条件之间的“与”关系,保留字 or 表示多个条件之间的“或”关系。
3.1.5 测试多个条件
if-elif-else 结构功能强大,但仅适用于只有一个条件满足的情况:遇到了通过了的测试后,Python 便会跳过余下的测试。这种设定效率很高,但只能测试一个特定的条件。
如果需要检查多个条件,应使用一系列不包含 elif 和 else 代码块的简单 if 语句。在可能有多个条件为 True 且需要在每个条件为 True 时都采取响应措施时,这种方法将非常适合。
3.2 循环结构
3.2.1 遍历循环
遍历循环可以理解为从遍历结构中逐一提取元素,放在循环变量中,对于每个所提取的元素执行一次语句块。for 语句的循环执行次数是根据遍历结构中元素个数确定的。其语法结构如下:
for <循环变量> in <遍历结构>:
<语句块>
<遍历结构> 可以是字符串、range() 函数或组合数据类型、文件等。对于字符串,可以逐一遍历字符串的每个字符,基本使用方式如下:
for <循环变量> in <字符串变量>:
<语句块>
使用 range() 函数,可以指定语句块的循环次数,基本使用方式如下:
for <循环变量> in range(<循环次数>):
<语句块>
除了在 range() 函数里直接指定循环次数,也可以使用如下用法:range(start, stop[, step])。表示计数从 start 开始,到 stop 结束,但不包括 stop。step 为步长,缺省时步长为 1。
3.2.2 无限循环
Python 通过保留字 while 实现无限循环:
while <条件>:
<语句块>
当程序执行到 while 语句时,条件测试如果为 True,执行循环体语句,语句结束后返回再次判断 while 语句的条件;当条件测试为 False 时,循环终止,执行与 while 同级别缩进的后续语句。
while 定义的是无限循环,让其在恰当的时候停止运行是很重要的。如果让 while 循环停止的条件不多时,通过简单的条件测试即可结束它的运行。但在更复杂的程序当中,很可能会有众多的事件将导致循环的停止,在这种情况下如果在一条 while 语句中检查所有的这些条件,将既复杂又困难。
一种很好的方法是定义一个变量将其作为标志(flag),用于判断整个程序是否处于活动状态。它相当于程序的交通信号灯,当所有的条件满足时,它的值为 True,循环继续执行;一旦循环条件不满足时就为 False,以此来结束程序的运行。
prompt = "\n我是一个复读机。"
prompt += "\n我会重复你的话,输入 quit 结束程序。"
active = True
while active:
message = input(prompt)
if message == 'quit':
active = False
else:
print(message)
------------------------------------------------------------------------
我是一个复读机。
我会重复你的话,输入 quit 结束程序。你好
你好
我是一个复读机。
我会重复你的话,输入 quit 结束程序。你是只鹦鹉
你是只鹦鹉
我是一个复读机。
我会重复你的话,输入 quit 结束程序。quit
上述程序中,变量 active 被设置成了标志位,用于判断输入的内容是不是 quit 以确定程序是否继续执行。
3.2.3 循环控制
循环结构有两个辅助循环控制的保留字:break 和 continue。
break 用来跳出 for 或 while 循环,脱离该循环后程序从循环后的代码继续执行。如果有 2 层或多层循环,break 只能退出最内层循环。
利用 break 可将上述代码改写:
prompt = '\n我是一个复读机。'
prompt += '\n输入 quit 结束程序。'
while True:
message = input(prompt)
if message == 'quit':
break
else:
print(message)
------------------------------------------------------------------------
我是一个复读机。
我会重复你的话,输入 quit 结束程序。你好
你好
我是一个复读机。
我会重复你的话,输入 quit 结束程序。你是只鹦鹉
你是只鹦鹉
我是一个复读机。
我会重复你的话,输入 quit 结束程序。quit
continue 用来结束本次循环,即跳出循环体中下面尚未执行的语句,但不跳出当前循环。
current_number = 0
while current_number < 10:
current_number += 1
if current_number % 2 == 0:
continue
print(current_number