《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('你已经退休了!')

嵌套选择

image-20240928192517659

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

posted @   ACatSmiling  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示