写在最前
Python 的条件控制语句和循环语句,通常统称为:Python控制流语句,它们用于控制程序代码的执行顺序,也可以称为:
- 控制结构(Control Structures)
- 流程控制语句(Flow Control Statements)
条件语句
Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。
可以通过下图来简单了解条件语句的执行过程:

代码执行过程:
if (<expr>) :
<statement>
<statement>
... ...
<statement>
<following_statements>条件判断关键字
| 关键字 / 函数 | 说明 | 示例 |
|---|---|---|
if |
条件判断语句,当条件为 True 时执行代码块 | if x > 0: |
elif |
多条件判断分支(else if) | elif x == 0: |
else |
所有条件不满足时执行 | else: |
pass |
空语句,占位用,保证语法完整 | if x > 0: pass |
match |
结构化模式匹配(Python 3.10+,类似 switch) | match x: case 1: ... |
if 语句
Python中if语句的一般形式如下所示:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3- 如果 "condition_1" 为 True 将执行 "statement_block_1" 块语句
- 如果 "condition_1" 为False,将判断 "condition_2"
- 如果"condition_2" 为 True 将执行 "statement_block_2" 块语句
- 如果 "condition_2" 为False,将执行"statement_block_3"块语句
Python 中用 elif 代替了 else if,所以if语句的关键字为:if – elif – else。
注意:
- 1、每个条件后面要使用冒号 :,表示接下来是满足条件后要执行的语句块。
- 2、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
- 3、在 Python 中没有 switch...case 语句,但在 Python3.10 版本添加了 match...case,功能也类似,详见下文。
GIF演示:

实例:

从结果可以看到由于变量 var2 为 0,所以对应的 if 内的语句没有执行。
if 常用操作运算符
以下为if中常用的操作运算符:
| 操作符 | 描述 |
|---|---|
< |
小于 |
<= |
小于或等于 |
> |
大于 |
>= |
大于或等于 |
== |
等于,比较两个值是否相等 |
!= |
不等于 |
实例:

利用循环语句做的猜数游戏:

if 嵌套
在嵌套 if 语句中,可以把 if...elif...else 结构放在另外一个 if...elif...else 结构中。
if 表达式1:
语句
if 表达式2:
语句
elif 表达式3:
语句
else:
语句
elif 表达式4:
语句
else:
语句实例:

运行结果:

match ... case
Python 3.10 增加了 match...case 的条件判断,不需要再使用一连串的 if-else 来判断了。

语法格式如下:
match subject:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>case _: 类似于 C 和 Java 中的 default:,当其他 case 都无法匹配时,匹配这条,保证永远会匹配成功。

以上是一个输出 HTTP 状态码的实例,多个状态码的输出结果。
一个 case 也可以设置多个匹配条件,条件使用 | 隔开,语法如下:
case 401|403|404:
return "Not allowed"循环语句
Python 中的循环语句有 for 和 while,循环语句控制结构如下图:

循环控制关键字与方法
| 关键字 / 函数 | 说明 | 示例 |
|---|---|---|
for |
迭代循环,用于遍历序列或可迭代对象 | for i in list: |
while |
条件循环,条件为 True 时持续执行 | while x > 0: |
break |
立即终止当前循环 | break |
continue |
跳过本次循环剩余代码,进入下一次迭代 | continue |
else(循环) |
循环正常结束(未被 break)时执行 | for i in range(3): ... else: ... |
pass |
循环中的占位语句(空操作) | for i in range(5): pass |
range() |
生成整数序列,常与 for 循环配合使用,左开右闭 | range(0, 5) |
enumerate() |
遍历时同时获取索引和值 | for i, v in enumerate(list): |
while 循环
Python 中 while 语句的一般形式:
while 判断条件(condition):
执行语句(statements)……执行流程图如下:

这是 GIF 演示:

同样需要注意冒号和缩进。另外,在 Python 中没有 do..while 循环。
以下实例使用了 while 来计算 1 到 100 的总和:

无限循环
我们们可以通过设置条件表达式永远不为 false 来实现无限循环,实例如下:
var = 1
while var == 1 : # 表达式永远为 true
num = int(input("输入一个数字 :"))
print ("你输入的数字是: ", num)
print ("Good bye!")你可以使用 CTRL+C 或者在 Mac 上使用 control + Z 来退出当前的无限循环。
无限循环在服务器上客户端的实时请求非常有用。
while 循环使用 else 语句
如果 while 后面的条件语句为 false 时,则执行 else 的语句块。
语法格式如下:
while <expr>:
<statement(s)>
else:
<additional_statement(s)>expr 条件语句为 true 则执行 statement(s) 语句块,如果为 false,则执行 additional_statement(s)。
简单语句组
类似 if 语句的语法,如果你的 while 循环体中只有一条语句,你可以将该语句与 while 写在同一行中, 如下所示:
flag = 1
while (flag): print ("欢迎访问 Furthe77oad's blog!")for 语句
Python for 循环可以遍历任何可迭代对象,如一个列表或者一个字符串。
for循环的一般格式如下:
for <variable> in <sequence>:
<statements>
else:
<statements>流程图:

Python for 循环实例:

也可用于打印字符串里的每个字符:

for ... else
在 Python 中,for...else 语句用于在循环结束后执行一段代码。
语法格式如下:
for item in iterable:
# 循环主体
else:
# 循环结束后执行的代码当循环执行完毕(即遍历完 iterable 中的所有元素)后,会执行 else 子句中的代码,如果在循环过程中遇到了 break 语句,则会中断循环,此时不会执行 else 子句。
for x in range(6):
print(x)
else:
print("Finally finished!")执行脚本后,输出结果为:
0
1
2
3
4
5
Finally finished!以下 for 实例中使用了 break 语句,break 语句用于跳出当前循环体,不会执行 else 子句:
sites = ["Baidu", "Google","zzl","Taobao"]
for site in sites:
if site == "zzl":
print("烂肉!")
break
print("循环数据 " + site)
else:
print("没有循环数据!")
print("完成循环!")执行脚本后,在循环到 "zzl"时会跳出循环体:
循环数据 Baidu
循环数据 Google
菜鸟教程!
完成循环!range() 函数
如果你需要遍历数字序列,可以使用内置 range() 函数。它会生成数列,例如:
>>>for i in range(5):
... print(i)
...
0
1
2
3
4也可以使用 range() 指定区间的值:
>>>for i in range(5,9):
... print(i)
...
5
6
7
8可以使 range() 以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长'):
>>>for i in range(0, 10, 3) :
... print(i)
...
0
3
6
9负数:
>>>for i in range(-10, -100, -30) :
... print(i)
...
-10
-40
-70可以结合 range() 和 len() 函数以遍历一个序列的索引,如下所示:
>>>a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
>>>for i in range(len(a)):
... print(i, a[i])
...
0 Google
1 Baidu
2 Runoob
3 Taobao
4 QQ还可以使用 range() 函数来创建一个列表:
>>>list(range(5))
[0, 1, 2, 3, 4]break 和 continue 语句及循环中的 else 子句
break 执行流程:

continue 执行流程:

while 语句代码执行过程:

for 语句代码执行过程:

break 语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
continue 语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
实例:
while 中使用 break:
n = 5
while n > 0:
n -= 1
if n == 2:
break
print(n)
print('循环结束')输出结果为:
4
3
循环结束while 中使用 continue:
n = 5
while n > 0:
n -= 1
if n == 2:
continue
print(n)
print('循环结束')输出结果为:
4
3
1
0
循环结束pass 语句
Python pass是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句,如下实例:
>>>while True:
... pass # 等待键盘中断 (Ctrl+C)最小的类:
>>>class MyEmptyClass:
... pass以下实例在字母为 o 时 执行 pass 语句块:
for letter in 'Suuuoo':
if letter == 'o':
pass
print ('执行 pass 块')
print ('当前字母 :', letter)
print ("Good bye!")