一、条件判断

1. 核心概念

条件判断是程序根据不同的条件执行不同代码块的能力,是编程中实现逻辑分支的关键。

表格对比:不同条件判断方式

判断方式语法适用场景特点
if 语句if 条件:单一条件判断最基本,必须掌握
if-elseif 条件: ... else: ...二选一场景非此即彼的选择
if-elif-elseif 条件1: ... elif 条件2: ... else: ...多条件分支多个互斥条件
三元表达式值1 if 条件 else 值2简单的二选一赋值简洁,一行完成
match-casematch 值: case 模式:模式匹配(Python 3.10+)更强大的多分支
真值判断bool(值) 或隐式转换判断值的真假Python特有逻辑

2、代码示例

# 1、基础if语句
from re import match

age = 18
if age >=18:
    print("已成年,可以进入")
    print("出示身份证")

#2、if-else语句
score = 100
if score >=80:
    print("恭喜,考试及格")
else:
    print("继续努力")

# 3、if-elif-else 多分支判断
grade = 100
if grade >= 90:
    print("优秀")
elif grade >=80:
    print("良好")
elif grade >=70:
    print("中等")
elif grade >=60:
    print("及格")
else:
    print("继续努力")

#4、三元表达式(条件表达式)
#语法:值1 if 条件 else 值2
age01 = 20
status = "成年人" if age01 >=18 else "未成年人"
print(f"年龄{age01}岁,{status}")

# 实际应用
a,b = 10,20
max_value = a if a>b else b
print(f"比较大的是{max_value}")

# # 5. match-case模式匹配(Python 3.10+)
# # 比多个if-elif更清晰
# def http_status(code):
#     match code:
#         case 200:
#             return "OK"
#         case 404:
#             return "Not Found"
#         case 500:
#             return "Internal Server Error"
#         case _:  # 默认情况
#             return "Unknown Status"
#
# print(f"状态码200:{http_status(200)}")
# print(f"状态码404:{http_status(404)}")
#
# # 更复杂的模式匹配
# def check_point(point):
#     match point:
#         case (0, 0):
#             return "原点"
#         case (x, 0):
#             return f"X轴上的点({x}, 0)"
#         case (0, y):
#             return f"Y轴上的点(0, {y})"
#         case (x, y):
#             return f"普通点({x}, {y})"
#
# print(check_point((0, 0)))    # 原点
# print(check_point((5, 0)))    # X轴上的点(5, 0)

# 6、真值判断
# Python 中以下值被视为 False
# False, None, 0, 0.0, 空字符串 '',空列表 [],空元组 (),空字典 {},空集合 set()
print("真值判断示例")
print(bool(0))          # False
print(bool(1))          # True
print(bool(""))         # False
print(bool("hello"))    # True
print(bool([]))         # False
print(bool([1, 2]))     # True

#隐式真值判断
name=""
if name: # 等价于 if name != ""
    print(f"欢迎{name}")
else:
    print("请输入姓名")
#7、逻辑运算符与条件组合
x=10
y=20
z=30
# and 所有条件都为True
if x<y and y<z:
    print("x,y,z成立")

#or 至少一个条件为True
age = 16
if age < 6 or age >=65:
    print("可以享受优惠票价")

#not 取反
is_weekend= False
if not is_weekend:
    print("今天是工作日")

# 8、嵌套条件判断
score01=100
attendance = 0.95 #出勤率

if score01 >=60:
    if attendance >=0.9:
        print("及格且良好,通过")
    else:
        print("及格但出勤不够,需补交作业")
else:
    print("不合格,需努力")

# 9、实际应用:用户登录验证
def login(username,password):
    correct_username = "admin"
    correct_password = "123456"

    if not username:
        return "用户名不能为空"
    elif not password:
        return "密码不能为空"
    elif username == correct_username and password == correct_password:
        return "登陆成功"
    else:
        return "用户名或密码错误"
#测试登陆函数
print(login("","123456"))
print(login("admin",""))
print(login("admin","123456"))
print(login("user","password"))

3. 进阶提示

  • 条件表达式的短路特性:Python中的andor运算符具有短路特性。and遇到第一个False就停止,or遇到第一个True就停止。

  • 链式比较:Python支持a < b < c这样的链式比较,比a < b and b < c更简洁。

  • match-case的优势:Python 3.10引入的match-case不仅匹配值,还能匹配模式、类型和结构,比多个if-elif更强大。

  • 条件表达式的嵌套:虽然三元表达式可以嵌套,但过度嵌套会降低可读性,建议复杂逻辑还是用if-else。

二、for 循环 | 遍历序列、range、enumerate、zip、for-else

1. 核心概念

for 循环是python中最常用的循环结构,用于遍历可迭代对象(如列表、元组、字符串、字典、集合等)。与while循环不同,for循环不需要手动维护计数器,语法更简洁。

表格对比:for循环 vs while循环

特性for循环while循环
使用场景遍历已知长度的序列条件满足时重复执行
循环变量自动从序列中取值需要手动定义和更新
终止条件序列遍历完毕条件表达式为 False
语法复杂度简洁,一行搞定需要计数器 + 条件判断
典型应用遍历列表、处理文件行用户输入验证、游戏循环

2. 代码示例

# 示例1:遍历列表
fruits=["苹果","香蕉","橙子","葡萄"]
print("遍历列表")
for fruit in fruits:
    print(f"我喜欢吃{fruit}")

# 示例2:使用 range() 生成数字序列
print("\n使用range生成序列")
for i in range(5):#生成0-4
    print(f"当前数字:{i}")
for i in range(2, 8):  # 生成2-7
    print(f"范围2-8:{i}")
for i in range(1, 10, 2):  # 生成1,3,5,7,9(步长为2)
    print(f"奇数:{i}")

# 示例3:使用 enumerate
print("\n使用enumerate")
for index,fruit in enumerate(fruits):
    print(f"索引{index}:{fruit}")

# 示例4:使用 zip 同时遍历多个序列
colors = ["红色","黄色","橙色","紫色"]
print("\n使用zip配对水果和颜色")
for fruit,color in zip(fruits,colors):
    print(f"{fruit}{color}")

#示例5:for-else结构
print("\nfor-else示例")
numbers=[2,4,6,8,10]
for num in numbers:
    if num % 2 !=0:
        print(f"找到奇数{num},循环中断")
        break
else:#当所有循环结束时执行
    print("所有数字都是偶数")

#示例6、遍历字典
student_scores = {"小明":85,"小红":92,"小刚":78}
print("\n遍历字典:")
for name,score in student_scores.items():
    print(f"{name}成绩{score}")
for name in student_scores.keys():
    print(f"学生:{name}")
for score in student_scores.values():
    print(f"分数{score}")

3. 进阶提示

  1. range 的妙用range(10, 0, -1)可以生成10到1的倒序序列,这在需要反向遍历时很有用。
  2. enumerate 的 start 参数:默认索引从0开始,但可以通过enumerate(iterable, start=1)让索引从1开始,更符合日常习惯。
  3. zip 处理不等长序列:当zip的多个序列长度不同时,会以最短的序列为准,多余元素会被忽略。如果需要以最长序列为准,可以使用itertools.zip_longest
  4. for-else 的使用场景:for-else结构非常适合搜索场景。当需要检查序列中是否存在满足条件的元素,如果找到就处理,如果没找到就执行默认操作时,for-else比设置标志变量更优雅。
  5. 遍历字典的顺序:在Python 3.7+中,字典会保持插入顺序,所以遍历items()keys()values()时顺序是可预测的。

三、while 循环与循环控制

1. 知识点

1.1 while 循环:条件驱动的重复执行

while循环在条件为真时持续执行代码块,适合“不知道循环多少次,但知道何时停止”的场景。

while 条件: 循环体

与for循环的核心区别:for遍历已知序列,while依赖条件判断。

1.2 核心概念对比

概念作用典型场景
while条件循环密码重试、游戏主循环、等待用户输入
break立即终止整个循环找到目标后退出、异常中断
continue跳过本轮剩余代码,进入下一轮过滤无效数据、跳过特定项
pass占位符,什么也不做预留代码位置、空函数体
for-else / while-else循环正常结束(非 break 退出)时执行 else搜索未找到时的兜底提示
列表推导式一行代码生成新列表数据变换、过滤、快速构造列表
循环嵌套循环里套循环九九乘法表、矩阵遍历

1.3 break/continue/pass详解

# break : 跳出循环
i = 0
while True:
    i +=1
    if i >5:
        break #跳出后,不再执行循环
    print(i, end=" ") # 输出结果:1 2 3 4 5

# continue: 跳过本轮,继续下一轮
print("\n")
for i in range(10):
    if i%2==0:
        continue #偶数跳过,不执行下面的print
    print(i,end=" ")#输出 1 3 5 7 9
#pass:占位符
def future_function():
    pass #暂时不实现,代码不会报错

1.4 循环的else子句(Python特色)

else 在循环没有被 break 打断时执行

for n in [3,8,11,2]:
    if n %7==0:
        print("找到7的倍数",n)
        break
else:
    print("没有找到")  # 没有 break 执行这里

1.5 列表推导式入门

将 for 循环压缩成一行表达式的语法:

#普通写法
squares = []
for x in range(1, 6):
    squares.append(x ** 2)
print(f"{squares}")

#推导式写法(等价)
squares = []
squares = [x ** 2 for x in range(1, 6)]  # [1, 4, 9, 16, 25]
print(f"{squares}")

#带条件的推导式
evens = [x for x in range(10) if x % 2 == 0]

#嵌套推导式(不推荐超过两层)
matrix = [[i*j for j in range(1,4)] for i in range(1,4)]
print(matrix)

推导式 vs 普通循环

维度普通循环列表推导式
可读性逻辑清晰,步骤多简洁,嵌套深时难读
性能较慢(每次 append 有方法查找开销)更快(C 层面执行)
适用场景复杂逻辑、多步骤操作简单变换、过滤
副作用可以有(如 print)不应有副作用

2. 代码示例

2.1 猜数字游戏(while+break)

import random

target = random.randint(1,100)
attempts = 0
print("猜数字游戏,范围为1-100之间")

while True:
    guess = input("输入你猜测的数字(输入 q 退出):")
    if guess.lower()=="q":
        print("游戏结束,正确答案是:",target)
        break
    if not guess.isdigit():
        print("请输入有效数字!")
        continue
    guess_num = int(guess)
    attempts +=1

    if guess_num < target:
        print("小了,再试试")
    elif guess_num >target:
        print("大了,再试试")
    else:
        print(f"恭喜!用了 {attempts} 次猜对")
        break
        

2.2、用户登录验证(while+计数器)

CORRECT_PASSWORD="python123"
max_attempts=3
attemps=0
while attemps < max_attempts:
    password = input("输入密码")
    attempts +=1

    if password ==CORRECT_PASSWORD:
        print("登录正确")
        break
    else:
        remaining=max_attempts - attempts
        if remaining>0:
            print(f"密码错误,还剩{remaining}次")
else:
    # while 的 else:当条件变为 False(次数用尽)时执行
    print("密码错误次数过多")

2.3 九九乘法表(嵌套循环)

# 标准版
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}×{i}={i * j:<2}", end="  ")
    print()  # 换行

# 列表推导式版(一次生成所有行)
table = "\n".join(
    "  ".join(f"{j}×{i}={i * j:<2}" for j in range(1, i + 1))
    for i in range(1, 10)
)
print(table)

3. 进阶提示

  • while True 不是万能的:确保循环内部有明确的 break 出口,否则会造成死循环。写之前先想好“什么条件下停止”。

  • 列表推导式不要滥用:超过两层的嵌套推导式会严重损害可读性。如果推导式写了一行还没结束,建议改回普通循环。

  • else 子句是 Python 的隐藏宝藏for-else / while-else 在其他语言中很少见,但在“搜索未找到则执行兜底逻辑”场景非常优雅,比加额外的 flag 变量更 Pythonic。

  • 海象运算符(:=:Python 3.8+ 可以在 while 条件中同时赋值和判断:

    # 传统写法
    line = input("> ")
    while line != "quit":
        print(f"你输入了: {line}")
        line = input("> ")
    
    # 海象运算符写法(更简洁)
    while (line := input("> ")) != "quit":
        print(f"你输入了: {line}")
    
  • 从循环中退出多层嵌套:Python 没有 goto,但可以用 return(函数内)或抛异常来跳出多层循环。更好的做法是封装成函数。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐