Python-基础2(流程控制)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


流程控制语句

顺序

按照程序正常的执行顺序,依次执行每条语句。

分支

分支流程又叫条件控制语句或者分支语句或者选择语句,是通过条件判断来决定执行的代码。

单分支

python 复制代码
if 表达式:
    语句

Python程序语言指定任何非0和非空(null)值为true,0 或者 null为false。

if语句的判断条件可以用条件表达式来表示其关系,后面的:必须加。其中"判断条件"成立时(非零),则执行后面的语句,而执行内容可以多行,以缩进来区分表示同一范围,缩进取消后,就不在分支范围了。如果条件不成立,不执行语句块内容(空的集合(set)、列表(list)、字典(dict)、元组(tuple)、甚至空的字符串(string),在进行 if 条件判断时,都会被视为 False)。

双分支

先进行条件判断,如果条件判断成立就执行语句块1, 条件不成立就执行语句块2

python 复制代码
if 表达式:
    语句1
else:
    语句2
python 复制代码
# 1. 测试空列表
my_list = []
if my_list:
    print("列表里有东西!")
else:
    print("列表是空的!")  # 这一行会被执行,因为 [] 等效于 False

# 2. 测试空字典
my_dict = {}
if my_dict:
    pass
else:
    print("字典是空的!")  # 这一行会被执行

# 3. 测试空字符串
my_string = ""
if my_string:
    pass
else:
    print("字符串是空的!")  # 这一行会被执行

多分支

python 复制代码
if 表达式1:
    语句1
elif 表达式2:
    语句2
elif 表达式3:
    语句3
else:  # else如不需要可以省略
    语句4

使用多分支语句的时候,需要注意下面几点:if 语句至多有1个else语句,else语句在所有的else if语句之后。 if语句可以有若干个 elif 语句,它们必须在else语句之前。一旦其中一个分支语句检测为 true,其他的elif以及else语句都将不再执行。下面这个案例同时满足好几个条件(既大于 60,也大于 80),但程序只会执行最先满足的那一个分支,其他的将不再执行

python 复制代码
# 定义一个测试分数
score = 85

print(f"开始评定成绩,当前分数为: {score}")

# 1. 结构化排布:if 开头,中间若干 elif,最后由 1 个 else 收尾
if score >= 90:
    print("评级:优秀 (A)")
    
elif score >= 80:
    # 85分满足这个条件,执行这里的语句后,整个 if-elif-else 结构就会立即结束!
    print("评级:良好 (B)")
    
elif score >= 60:
    # 注意:85分其实也大于等于60!
    # 但因为上面的 elif 已经成立了,所以这里的代码根本连"看都不看",直接跳过。
    print("评级:及格 (C)")
    
else:
    # 如果上面所有的 if 和 elif 都不成立(即小于60),才会执行 else
    print("评级:不及格 (D)")

print("评级结束,程序继续往下执行...")

嵌套分支

python 复制代码
if 表达式1:
    if 表达式2:
        语句1
    else:
        语句2
else:
    if 表达式3:
        语句3
    else:
        语句

在一个if语句中,又包含另外一个if语句,这就是if语句的嵌套

python 复制代码
username = input("请输入用户名:")
password = input("请输入密码:")

if username == "admin":
    if password == "123456":
        print("登录成功")
    else:
        print("密码错误")
else:
    print("用户名不存在")

match case语句

python 复制代码
match x:
    case a:
        语句1
    case b:
        语句2
    case _:
        语句3

match后的对象会依次与case后的内容匹配,匹配成功则执行相应语句,否则跳过。其中_可以匹配一切。

python 复制代码
cmd = input("请输入命令(start/stop/restart):")

match cmd:
    case "start":
        print("启动程序")
    case "stop":
        print("停止程序")
    case "restart":
        print("重启程序")
    case _:
        print("未知命令")

三目运算符

表达式1 if 判断条件 else 表达式2

python 复制代码
age = 20
result = "成年人" if age >= 18 else "未成年人"
print(result)

循环

在满足某个条件下,重复的执行某段代码。

while循环

python 复制代码
while 表达式:
    语句-循环体

先判断条件是否成立,如果条件成立就执行循环体一次;然后再判断条件是否成立,如果成立,继续执行循环体,直到循环条件不成立的时候,才会结束循环,执行循环下面的其他语句。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。执行语句可以是单个语句或语句块。

如果条件表达式一直成立,那称之为无限循环,也叫死循环。

python 复制代码
password = ""

while password != "123456":
    password = input("请输入密码:")
    if password == "123456":
        print("密码正确,登录成功")
    else:
        print("密码错误,请重试")

while 后可以加上 else,当 while 表达式结果为 False 时会执行 else 中的语句。

max_attempts = 3

attempts = 0

password = "123456"

while attempts < max_attempts:

user_input = input("请输入密码:")

attempts += 1

复制代码
if user_input == password:
    print("密码正确,登录成功!")
    break
else:
    print(f"密码错误,还有 {max_attempts - attempts} 次机会")

else:

print("尝试次数用尽,账号已锁定")

for循环

python 复制代码
for 临时变量 in 可迭代对象:
    语句

for 循环后也可以加上 else,循环结束后会执行 else 中语句。

python 复制代码
for 临时变量 in 可迭代对象:
    语句1
else:
    语句2

for是关键字,临时变量是自己定义的用来存储遍历出来元素的变量名字,in是关键字,可迭代对象是要遍历的序列,首先判断是否有下一个元素可以获取,如果有,则将元素取出,赋值给临时变量,继续判断是否有下一个元素可以进行取出,直到将所有元素都取出,循环结束

range()

作用:函数可以生成数列,它返回一个可迭代对象。

语法:range([start,] stop[, step])

start: 生成序列的起始值--包含 默认0

stop:生成序列的结束值--不包含

step:生成序列的步长 默认为1

如果为正数:生成的序列是递增的,要求起始值 < 结束值

如果为负数:生成的序列是递减的,要求起始值 > 结束值

如果stop小于或等于 start且step为正数,或者stop大于或等于start且step为负数,range() 函数将生成一个空序列。

指定生成到stop(不包含stop)的数列,默认从0开始。

python 复制代码
print("--- 1. 只传一个参数:指定 stop(默认 start=0, step=1) ---")
# 语法:range(stop)
# 生成 0 到 4 的数列,包含起始值 0,不包含结束值 5
res1 = list(range(5))
print(f"range(5) 生成结果: {res1}")


print("\n--- 2. 传两个参数:指定 start 和 stop(默认 step=1) ---")
# 语法:range(start, stop)
# 生成 2 到 5 的数列,包含 2,不包含 6
res2 = list(range(2, 6))
print(f"range(2, 6) 生成结果: {res2}")


print("\n--- 3. 传三个参数(正数步长):递增数列 ---")
# 语法:range(start, stop, step)
# 要求:start(1) < stop(10)。步长为 2(常用于生成奇数/偶数)
res3 = list(range(1, 10, 2))
print(f"range(1, 10, 2) 生成结果: {res3}")


print("\n--- 4. 传三个参数(负数步长):递减数列 ---")
# 语法:range(start, stop, step)
# 要求:start(10) > stop(0)。步长为 -1(常用于倒数)
# 生成 10 到 1 的数列,包含 10,不包含 0
res4 = list(range(10, 0, -1))
print(f"range(10, 0, -1) 生成结果: {res4}")


print("\n--- 5. 极易踩坑的边界情况:生成空序列 ---")
# 情况A:步长为正(默认1),但 stop(2) 小于 start(5)
empty1 = list(range(5, 2))
print(f"情况A range(5, 2) 生成结果: {empty1} (空序列)")

# 情况B:步长为负(-1),但 stop(5) 大于 start(2)
empty2 = list(range(2, 5, -1))
print(f"情况B range(2, 5, -1) 生成结果: {empty2} (空序列)")

range返回的是一个可迭代对象,可迭代对象(Iterable):可以被 for 循环遍历的对象,迭代器(Iterator):有 next() 方法,可以逐个取值的对象

python 复制代码
from collections.abc import Iterable, Iterator

r = range(5)

print("是可迭代对象吗?", isinstance(r, Iterable))   # True
print("是迭代器吗?", isinstance(r, Iterator))       # False

continue

跳过当前循环块中的剩余语句,继续进行下一轮循环。一般写在if判断中。

python 复制代码
# 乘客行李清单
luggage = ["衣服", "笔记本电脑", "打火机", "鞋子", "矿泉水", "相机"]

# 违禁物品黑名单
prohibited = ["打火机", "矿泉水"]

print("--- ✈️ 机场安检开始 ---")

for item in luggage:
    print(f"\n正在扫描物品:【{item}】...")
    
    # 一般写在 if 判断中:如果是违禁品
    if item in prohibited:
        print(f"  ⚠️ 警告:【{item}】属于违禁品,直接没收!")
        # 关键点:执行 continue 后,当前这一轮循环就此打住!
        # 即使下面还有代码,也不会执行了,直接去拿行李清单里的下一个物品。
        continue 
        
    # ==========================================
    # 下面的代码,只有在没有触发 continue 的情况下才会执行
    # ==========================================
    print(f"  ✅ 【{item}】安全通过。")
    print(f"  📦 正在将【{item}】小心地装入行李箱...")

print("\n--- ✈️ 安检结束,祝您旅途愉快! ---")

break

跳出当前for或while的循环体,一般写在if判断中。如果for 或while循环通过break终止,循环对应的else 将不执行。

python 复制代码
# 设定系统正确密码和最大尝试次数
correct_password = "admin"
max_attempts = 3

print("============= 情况 A:中途成功,触发 break =============")
# 模拟用户输入的密码序列(第2次输入正确)
user_inputs_A = ["123456", "admin", "000000"]

for i in range(max_attempts):
    current_input = user_inputs_A[i]
    print(f"第 {i+1} 次尝试,输入密码: '{current_input}'")
    
    # break 一般写在 if 判断中:满足特定条件时立刻中止全部循环
    if current_input == correct_password:
        print("  ✅ 密码正确!门锁已打开。(执行 break)")
        break  # 一旦执行这句,循环立刻暴毙,后面的次数不试了,else 也作废了!

else:
    # 只有当 for 循环把 range(3) 完完整整跑完(没有遇到 break)时,才会执行这里
    print("  🚨 警告:连续 3 次密码错误,账户已锁定!(执行 else)")

print("情况 A 流程结束。\n")


print("============= 情况 B:一直失败,触发 else ==============")
# 模拟用户输入的密码序列(3次全错)
user_inputs_B = ["111111", "222222", "333333"]

for i in range(max_attempts):
    current_input = user_inputs_B[i]
    print(f"第 {i+1} 次尝试,输入密码: '{current_input}'")
    
    if current_input == correct_password:
        print("  ✅ 密码正确!门锁已打开。(执行 break)")
        break  # 因为密码一直不对,这句 break 永远没有机会执行
        
else:
    # 循环老老实实地循环了 3 次,自然"寿终正寝",于是系统给了个"兜底"提示
    print("  🚨 警告:连续 3 次密码错误,账户已锁定!(执行 else)")

print("情况 B 流程结束。")

pass

pass是空语句,是为了保持程序结构的完整性。pass不做任何事情,一般用做占位语句。例如:在一个循环中,如果循环体为空,语法会提示报错,这个时候我们就可以使用pass占位,或者某一个功能先不实现,也可以使用pass

python 复制代码
for i in range(10):
    pass
相关推荐
Lenyiin3 小时前
《Python 修炼全景指南:一》从环境搭建到第一个程序
开发语言·python
涛声依旧393164 小时前
Python项目实战:学生信息管理系统
开发语言·python·数据挖掘
kcuwu.4 小时前
Python进阶:生成器与协程,高效并发编程的核心实践
windows·python·php
XiaoQiao6669994 小时前
python 简单题目练手【详解版】【1】
开发语言·python
ZC跨境爬虫4 小时前
极验滑动验证码自动化实战:背景提取、缺口定位与Playwright滑动模拟
前端·爬虫·python·自动化
智算菩萨4 小时前
【Python图像处理】2 数字图像基础与Python图像表示
开发语言·图像处理·python
xiaoshuaishuai85 小时前
Git二分法定位Bug
开发语言·python
2401_835792545 小时前
FastAPI 速通
windows·python·fastapi
YMWM_6 小时前
export MPLBACKEND=Agg命令使用
linux·python