流程控制

2021-10-09 23:16:37
admin
1758
最后编辑:admin 于 2022-11-24 20:28:40

条件测试:

Python 和 C 一样,任何非零整数都为真,零为假。这个条件也可以是字符串或列表的值,事实上,任何序列都可以;长度非零就为真,空序列则为假。

  • == 判断左右两边的值是否相等

  • !=    判断左右两边的值是否不等

  • < > <= >= 数值比较

  • and or 检查多个条件

  • 布尔表达式 结果为 True 或 False

  • 关键字 in ,用于确认序列中是否包含某个值。

python 区别于其他语言,代码块并不是使用花括号{},而是使用缩进的形式。注意,同一块语句的每一行的缩进相同。

if 语句

if 语句包含零个或多个 elif 子句及可选的 else 子句。

python的 if 语句结构:

  • 单 if 结构:当条件测试通过时,执行指定操作;

  • if-else 结构:当条件测试通过时执行一个操作,否则执行另一个操作;

  • if-elif-else 结构:多条件判断,依次检查每个条件测试,直到通过;

注:每个条件测试后面都跟着冒号:,对应的操作代码要统一缩进。

如:

age = 31
if age < 18:
    print("未成年")
elif age < 30:
    print("年轻人")
elif age < 50:
    print("中年人")
else:
    print("老年人")

for 语句

Python 的 for 语句与 C 或 Pascal 中的不同。Python 的 for 语句不迭代算术递增数值(如 Pascal),或是给予用户定义迭代步骤和暂停条件的能力(如 C),而是迭代列表、字典或字符串等任意序列,元素的迭代顺序与在序列中出现的顺序一致。 例如:

words = ['cat', 'window', 'defenestrate']
for w in words:
    print(w, len(w))

# 输出结果:
cat 3
window 6
defenestrate 12

遍历集合时修改集合的内容,会很容易生成错误的结果。因此不能直接进行循环,而是应遍历该集合的副本或创建新的集合:

users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}

for user, status in users.copy().items():
    if status == 'inactive':
        del users[user]

active_users = {}
for user, status in users.items():
    if status == 'active':
        active_users[user] = status

while 语句

age = 1                 # 循环变量赋初值
while age <= 18:        #条件测试,勿忘冒号
    print(age)          #循环体
    age += 1            #勿忘循环变量变更,否则陷入死循环

循环中的 break、continue

  • break 语句和 C 中的类似,用于退出最近的 for 或 while 循环;

  • continue 语句也借鉴自 C 语言,表示继续执行循环的下一次迭代。

range() 函数

内置函数 range() 常用于遍历数字序列,但注意:该函数并不是返回一个数字列表,而是一个可迭代对象。迭代时,函数或程序结构可通过该对象获取连续项,直到所有元素全部迭代完毕,并没有生成真正的列表,从而节省了空间。for 语句就是这样的结构。

for i in range(5):
    print(i)
    
# 输出结果:
0
1
2
3
4

range() 的三个参数意义:

  • 第一个参数表示循环变量i的开始值,如果是0,可以省略不写;

  • 第二个参数表示循环变量i的上限值,但不包含它,range中只有一个数字时,表示该参数;

  • 第三个参数表示循环变量i每次迭代循环结束后的递增值,1可以省略不写;

如:

range(1,5) => [1, 2, 3, 4]
range(1,10,2) => [1, 3, 5, 7, 9]
a = range(1,10,2)
for var in a:
    print(var)
输出结果:1 3 5 7 9

如要将 range() 返回的可迭代对象转化为列表,可以使用 list() 函数。

  • 生成的序列不包含给定的终止数值;

  • range 可以不从 0 开始,还可以按指定幅度递增。

list(range(5, 10))
[5, 6, 7, 8, 9]

list(range(0, 10, 3))
[0, 3, 6, 9]

match 语句

match 语句采用一个表达式并将其值与作为一个或多个 case 块给出的连续模式进行比较。这在表面上类似于其他语言中的 switch 语句。

最简单的形式是将一个目标值与一个或多个字面值进行比较:

def http_error(status):
    match status:
        case 400:
            return "Bad request"
        case 404:
            return "Not found"
        case 418:
            return "I'm a teapot"
        case _:
            return "Something's wrong with the internet"

注意最后一个代码块:“变量名” _ 被作为 通配符 并必定会匹配成功。 如果没有 case 语句匹配成功,则不会执行任何分支。

使用 | (“ or ”)在一个模式中可以组合多个字面值:

case 401 | 403 | 404:
    return "Not allowed"