《Python 基础篇》三:流程控制
Author: ACatSmiling
Since: 2024-09-27
Python 代码在执行时是按照自上向下顺序执行的。通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次。
流程控制语句分成两大类:条件判断语句,循环语句。
条件判断语句
if
语法:
if 条件表达式: 代码块
- 执行的流程:if 语句在执行时,会先对条件表达式进行求值判断,如果为 True,则执行 if 后的语句;如果为 False,则不执行。
默认情况下,if 语句只会控制紧随其后的那条语句,如果希望 if 可以控制多条语句,则可以在 if 后跟着一个代码块。
-
代码块:
- 代码块中保存着一组代码,同一个代码块中的代码,要么都执行要么都不执行。
- 代码块就是一种为代码分组的机制。
- 如果要编写代码块,语句就不能紧随在
:
后边,而是要写在下一行。 - 代码块以缩进开始,直到代码恢复到之前的缩进级别时结束。
- 缩进有两种方式,一种是使用 tab 键,一种是使用空格(四个)。
- Python 代码中使用的缩进方式必须统一。
- Python 的官方文档中推荐我们使用空格来缩进。
-
可以使用逻辑运算符来连接多个条件,如果希望所有条件同时满足,则需要使用 and;如果希望只要有一个条件满足即可,则需要使用 or。
示例:
num = input('请输入一个数:') num = int(num) if num > 10: print('num比10大!') if 10 < num < 20: print('num比10大,num比20小!')
if - else
语法:
if 条件表达式: 代码块1 else: 代码块2
- 执行流程:if - else 语句在执行时,先对 if 后的条件表达式进行求值判断,如果为 True,则执行 if 后的代码块 1;如果为 False,则执行 else 后的代码块 2。
示例:
age = 7 if age > 17: print('你已经成年了~~') else: print('你还未成年~~') # 如果一个年份可以被 4 整除不能被 100 整除,或者可以被 400 整除,这个年份就是闰年 year = int(input('请输入一个任意的年份:')) if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: print(year, '是闰年') else: print(year, '是平年')
if - elif - else
语法:
if 条件表达式: 代码块 elif 条件表达式: 代码块 elif 条件表达式: 代码块 else: 代码块
-
执行流程:if - elif - else 语句在执行时,会自上向下依次对条件表达式进行求值判断,如果表达式的结果为 True,则执行当前代码块,然后语句结束;如果表达式的结果为 False,则继续向下判断,直到找到 True 为止;如果所有的表达式都是 False,则执行 else 后的代码块。
-
if - elif - else 中只会有一个代码块会执行。
示例:
age = 210 if age > 200: print('活的可真久!') elif age > 100: print('你也是老大不小了!') elif age >= 60: print('你已经退休了!') elif age >= 30: print('你已经是中年了!') elif age >= 18: print('你已经成年了!') else: print('你还是个小孩!') age = 68 if 18 <= age < 30: print('你已经成年了!') elif 30 <= age < 60: print('你已经中年了!') else: print('你已经退休了!')
嵌套选择
match
模式匹配
:match 语句是 Python 3.10 及以后版本中引入的新特性,它允许你根据对象的模式来检查对象,并执行相应的代码块。
- match 语句中的每个代码块由一个或多个 case 子句组成。
- 每个 case 子句后面跟着一个模式和一个代码块。
- 当模式匹配成功时,会执行相应的代码块。
- 如果没有任何模式匹配成功,则可以选择使用一个默认的代码块,使用下划线 _ 来表示。
示例:
text = 'hello' match text: case 'hello': print("text is 'hello'") case 'world': print("text is 'world'") case _: # 匹配所有其他值 print("text is neither 'hello' nor 'world'")
循环语句
循环语句可以使指定的代码块重复指定的次数。
循环语句分成两种:while 循环和 for 循环。
while 循环
语法:
while 条件表达式: 代码块 else: 代码块
- 执行流程:while 语句在执行时,会先对 while 后的条件表达式进行求值判断,如果判断结果为 True,则执行循环体(代码块),循环体执行完毕,继续对条件表达式进行求值判断,以此类推,直到判断结果为 False,则循环终止,如果循环有对应的 else,则执行 else 后的代码块。
- 条件表达式恒为 True 的循环语句,称为死循环。
循环的三个要件:
- 初始化表达式:通过初始化表达式初始化一个变量。
- 条件表达式:条件表达式用来设置循环执行的条件。
- 更新表达式:修改初始化变量的值。
示例:
# 创建一个执行十次的循环 i = 0 while i < 10: i += 1 print(i, 'hello') else: print('else中的代码块') # 水仙花数是指一个 n 位数(n≥3),它的每个位上的数字的 n 次幂之和等于它本身(例如:1**3 + 5**3 + 3**3 = 153)。 # 求 1000 以内所有的水仙花数 # 获取 1000 以内的三位数 i = 100 while i < 1000: # 假设,i 的百位数是 a,十位数 b,个位数 c # 求 i 的百位数 a = i // 100 # 求 i 的十位数 # b = i // 10 % 10 b = (i - a * 100) // 10 # 求 i 的个位数字 c = i % 10 # print(i , a , b , c) # 判断 i 是否是水仙花数 if a**3 + b**3 + c**3 == i : print(i) i += 1
for 循环
语法:
for 变量 in 序列 : 代码块
range()
函数可以用来创建一个数字序列,常与 for 循环结合使用来重复执行代码块指定的次数。- for 循环除了创建方式以外,其余的都和 while 循环一样,包括 else、break、continue 都可以在 for 循环中使用。
示例:
for i in range(5): print(i)
输出结果:
0 1 2 3 4
循环控制
break
作用:退出循环。
- 注意:只能跳出距离最近的 while 或者 for 循环。在循环过程中,如果某一个条件满足后,不再希望循环继续执行,可以使用 break 退出循环。
示例:
i = 0 while i < 5: if i == 3: break print(i) # 结束循环,结果:0 1 2 i += 1 else: print('循环结束')
输出结果:
0 1 2
continue
作用:跳过本次循环后面的剩余语句,然后继续下一次循环。
- 注意:只能跳出距离最近的 while 或者 for 循环。
示例:
i = 0 while i < 5: i += 1 if i == 2: continue # 跳出当前循环,结果:1 3 4 5 循环结束 print(i) else: print('循环结束')
输出结果:
1 3 4 5 循环结束
else
else 可以使用在循环语句中,如果没有通过 break 退出循环,循环结束后,会执行 else 的代码。
示例:
num = 1 sum = 0 while num <= 5: sum = sum + num print(sum) if sum == 10: break num += 1 else: print('这是前一个循环,执行了break语句') print('####################################') num = 1 sum = 0 while num <= 3: sum = sum + num print(sum) if sum == 10: break num += 1 else: print('这是后一个循环,没有执行break语句')
输出结果:
1 3 6 10 #################################### 1 3 6 这是后一个循环,没有执行break语句
pass
作用:当语句要求不希望任何命令或代码来执行时使用。
- pass 语句表示一个空操作,在执行时没有任何的响应。
- pass 的位置最终应该有代码来执行,只不过暂时未写出来,可以使用在流程控制和循环语句中。
- pass 语句是用来在判断或循环语句中占位的,无实际意义。如果循环体内容没想好怎么写,可以先用 pass 占位,这样不会影响程序执行。
示例:
i = 0 if i < 5: pass
循环嵌套
打印图形:
# 在控制台中打印如下图形 # ***** # ***** # ***** # ***** # ***** # # 创建一个循环来控制图形的高度 # 循环嵌套时,外层循环没执行一次,内存循环就要执行一圈 i = 0 while i < 5: # 创建一个内层循环来控制图形的宽度 j = 0 while j < 5: # print() 默认在结尾打印 \n 换行符,添加 end 参数,打印时不要换行 print("* ", end='') j += 1 # 每一行打印完毕后,再打印一个换行符 print() i += 1 # # * j<1 i=0 # ** j<2 i=1 # *** j<3 i=2 # **** j<4 i=3 # ***** j<5 i=4 # # ***** # **** # *** # ** # * i = 0 while i < 5: j = 0 while j < i + 1: print("* ", end='') j += 1 print() i += 1
99 乘法表:
# 打印 99 乘法表 # 1*1=1 # 1*2=2 2*2=4 # 1*3=3 2*3=6 3*3=9 # ... 9*9=81 # 创建一个外层循环来控制图形的高度 i = 0 while i < 9: i += 1 # 创建一个内层循环来控制图形的宽度 j = 0 while j < i: j += 1 print(f"{j}*{i}={i*j} ",end="") print()
time() 函数
time()
:可以用来获取当前的时间,返回的单位是秒
示例:
# 引入一个 time 模块,来统计程序执行的时间 from time import * # 获取程序开始的时间 # 优化前: # 10000 个数 12.298秒 # 100000 个数 没有结果 # 第一次优化:加 break # 10000 个数 1.577 秒 # 100000 个数 170.645 秒 # 第二次优化:循环到根号为止 # 10000 个数 0.068 秒 # 100000 个数 1.646 秒 # # 36 的因数 # 2 18 # 3 12 # 4 9 # 6 6 # begin = time() i = 2 while i <= 100000: flag = True j = 2 while j <= i ** 0.5: if i % j == 0: flag = False # 一旦进入判断,则证明 i 一定不是质数,此时内层循环没有继续执行的必要 # 使用 break 来退出内层的循环 break j += 1 if flag: # print(i) pass i += 1 # 获取程序结束的时间 end = time() # 计算程序执行的时间 print("程序执行花费了:", end - begin, "秒")
原文链接
https://github.com/ACatSmiling/zero-to-zero/blob/main/PythonLanguage/python.md
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了