Python 流程控制:跳转与中断、if、while、for、try ...(一篇解千疑)

您所在的位置:网站首页 python中的while循环有限循环怎么讲 Python 流程控制:跳转与中断、if、while、for、try ...(一篇解千疑)

Python 流程控制:跳转与中断、if、while、for、try ...(一篇解千疑)

2024-07-14 02:28| 来源: 网络整理| 查看: 265

Python 流程控制 流程控制简要介绍条件结构if 语句match 语句 循环结构while 语句for 语句 跳脱与略过continue 语句break 语句pass 语句 异常捕获结构try 语句 函数结构函数的定义匿名函数(lambda 表达式) 的定义函数案例关于作用域的一个案例lambda 表达式返回值作为实参

流程控制 简要介绍

在一个朴实无华的程序中,执行总是顺序的,但要实现复杂的逻辑,就必须引入中断和跳转进行流程控制。

中断包括故障中断和结束中断,也可以称作是一种跳转。

跳转控制是一个相当成熟的技术,其结构完善且模式多样,几乎在任何一个程序中都不可或缺。包含但不限于:

条件分支结构循环结构异常捕获结构函数调用中断、流的输入与输出

条件和循环是容易理解的,在汇编的学习中就已经能看到这两种结构的影子了。

异常捕获结构也是一种跳转。典型的,在做爬虫请求时,往往需要不断更换 ip 请求,一个 ip 请求失败带来异常,捕获后再根据需求从 ip池 中拿新的 ip 进行请求。

函数调用也很显然,调用就是要跳转到函数实现部分,其中输入参数和返回结果还涉及堆栈的使用,属于数据存储区的跳转,也并不复杂。

中断常常表现为故障结束程序,也是一种跳转。

流的输入与输出不能在严格意义上称为跳转控制,因为像 an_integral = int(input("输入一个整数:"))只不过是程序停顿下来,等待键入一个值在缓存区,然后获取到赋值给变量。再比如,将一个字符串写入文件中等等实例,都只是在数据的不同区块进行跳转。但是计算机中一切都是数据,代码是、数据是、逻辑也是,所以归纳于此。

总之,流程控制的概念不复杂,下面介绍一些常用结构的语法和案例。

条件结构 if 语句

if 条件语句是流程控制中最常用的语句,用于有条件的执行。

语法:

if '条件1' : '子句体' (elif '条件n' : # ()* 表示可以0或多个 elif 子句 '子句体')* [else : # [] 表示可以0或1个 else 子句 '子句体'] if 根据条件的真假值来判定是否执行:在所有子句体中选择唯一匹配的一个,然后执行该子句体而略过其它。 如果条件均为假值,则 else 子句体如果存在就会被执行,否则直接跳过。关键字 elif 是 else if 的缩写,适用于避免过多的缩进。多个条件判断可以当作其他语言中 switch 语句的替代品(python 中没有该语句)。

案例:根据分数获得等级。

score = int(input("输入你的分数:")) if score >= 90: print("A") elif score >= 80: print("B") elif score >= 70: print("C") elif score >= 60: print("D") else: print("E")

注意:如果要把一个值与多个常量进行比较,或者检查特定类型、属性,match 语句更实用。

match 语句

match 语句是 3.10 版本开始出现的,其要点是对表达式进行模式匹配。根据其内容的完整性,完全可以作为一个匹配结构,但是匹配也是按条件匹配,所以本文将之归纳于此。

语法:一个简明的语法介绍如下,

match '目标表达式': (case '匹配模式' [if '条件']: '语句块' [case _: # 必定匹配的模块 '语句块'])+ # [] 表示可存在0或1个, ()+ 表示可存在1或多个 其中的目标表达式和匹配模式都有复杂的语法与规范,更多信息另请参阅 match 语句。[if '条件'] 是一个加强约束的项。

案例:一个简单的匹配个人姓名和年龄的案例。

class Person: def __init__(self, name='', age=0): self.name = name self.age = age def main(): persons = [Person('', 0), Person('Ace', 0), Person('Alice', 18)] for person in persons: match person: case Person(name='', ): print("无名之辈") case Person(name=x, age=0): print(f"'{x}'的年龄怎么是'0'呢?") case Person(name=x, age=y) if y >= 18: print(f"'{y}'岁的'{x}',你已经成年了。") case _: print("必定的匹配") if __name__ == '__main__': main()

作为一个新语句,这是足够有意思的;另外需要注意的是,match 和 case 是弱关键字。

循环结构

循环结构的用武之地往往是遍历与重试。

while 语句

在条件表达式保持为真的情况下重复地执行。

语法:

while '条件': '循环体' [else: '结束语'] # [] 表示可存在0或1个 都知道 while 语句是先判断再执行的:最后的 else 子句作为最后的可选项,循环判断为假时执行,往往是 while 循环结构最后的一次操作。要注意的是,被 break 结束的循环是不会执行该子句的,这是因为 else 是循环的一部分,break 跳出了循环。所以一般适用于不被 break 结束的有限循环。

** 案例**:角谷定理,输入一个整数,为奇则 ×3+1 为偶则 ÷2,最终会得到 1。

num = int(input("输入一个整数:")) n, i = num, 0 while True: if n == 1: break if n % 2: n = n * 3 + 1 else: n = n / 2 i += 1 print(f"{num}经过'{i}'次角谷迭代后变为一") # 13, 9 for 语句

for 语句用于对序列(例如字符串、元组或列表)或其他可迭代对象中的元素进行迭代。与 双目运算符 in 联合使用。

语法:

for '条目' in '序列': '循环体' [else: '结束语'] # [] 表示可存在0或1个 for 循环这里应该开始有迭代、可迭代对象、迭代器的概念。在迭代前,会先根据 '序列' 产生一个可迭代对象,针对该可迭代对象创建一个迭代器。 条目 不断被迭代器赋值迭代,进入循环体,直到结束。几乎和 while 循环一样功能的 else 子句,注意相同的问题(即被 break 结束的循环会执行不了该语句)。for 循环也常被用作 列表推导式、元组推导式、生成器 等的构造。

案例1:获取 0~100 中的奇数。

arr = [i for i in range(100) if i % 2]

** 案例2**:筛选有效信息。

info = {'name': 'Ace', 'age': 0, 'weight': 121.5, 'height': None, 'school': ''} useful_info = {} for key, value in info.items(): if value: useful_info[key] = value print(useful_value) 跳脱与略过

跳脱是控制循环的一大办法。一个死循环的程序可以通过监视循环次数,次数过多则选择跳脱整个循环(break);循环过程中一些无关紧要的项目可以跳过本轮(continue)。

略过这一说法可能过于生动,但不失其为一种准确的逻辑表达。

continue 语句

跳过一些不予处理的项。

案例:把列表中的偶数×10。

lst = [n for n in range(1, 101)] for i in range(len(lst)): # 把列表中的偶数×10 if lst[i] % 2: continue lst[i] *= 10 print(lst) break 语句

跳出最近的一层循环(存在循环嵌套时注意)。

案例:九九乘法表查找。

x, y = input("输入式子如 '2*3' 然后回车:").split('*') x, y, flag = int(x), int(y), False for i in range(1, 10): for j in range(1, 10): if i == x and j == y: print("f{x}x{y}={i*j}") flag = True break if flag: break pass 语句

pass 语句不执行任何操作。语法上需要一个语句,但程序不实际执行任何动作时,可以使用该语句。

功能:

临时占位,类似于 省略符…。忽略程序,什么都不执行,但维护程序结构。 class A: pass # 展位 x = 101 if x


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3