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 = 210if age > 200:print('活的可真久!')
elif age > 100:print('你也是老大不小了!')
elif age >= 60:print('你已经退休了!')
elif age >= 30:print('你已经是中年了!')
elif age >= 18:print('你已经成年了!')
else:print('你还是个小孩!')age = 68if 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 += 1print(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 % 10b = (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:breakprint(i) # 结束循环,结果:0 1 2i += 1
else:print('循环结束')
输出结果:
0
1
2
continue
作用:跳过本次循环后面的剩余语句,然后继续下一次循环。
- 注意:只能跳出距离最近的 while 或者 for 循环。
示例:
i = 0
while i < 5:i += 1if 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 + numprint(sum)if sum == 10:breaknum += 1
else:print('这是前一个循环,执行了break语句')print('####################################')num = 1
sum = 0
while num <= 3:sum = sum + numprint(sum)if sum == 10:breaknum += 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 = 0while 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 = 0while j < i + 1:print("* ", end='')j += 1print()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 = 0while j < i:j += 1print(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 = Truej = 2while j <= i ** 0.5:if i % j == 0:flag = False# 一旦进入判断,则证明 i 一定不是质数,此时内层循环没有继续执行的必要# 使用 break 来退出内层的循环breakj += 1if flag:# print(i) passi += 1# 获取程序结束的时间
end = time()# 计算程序执行的时间
print("程序执行花费了:", end - begin, "秒")
原文链接
https://github.com/ACatSmiling/zero-to-zero/blob/main/PythonLanguage/python.md