python基础学习-06
一、条件判断
1. 核心概念
条件判断是程序根据不同的条件执行不同代码块的能力,是编程中实现逻辑分支的关键。
表格对比:不同条件判断方式
| 判断方式 | 语法 | 适用场景 | 特点 |
|---|---|---|---|
| if 语句 | if 条件: | 单一条件判断 | 最基本,必须掌握 |
| if-else | if 条件: ... else: ... | 二选一场景 | 非此即彼的选择 |
| if-elif-else | if 条件1: ... elif 条件2: ... else: ... | 多条件分支 | 多个互斥条件 |
| 三元表达式 | 值1 if 条件 else 值2 | 简单的二选一赋值 | 简洁,一行完成 |
| match-case | match 值: 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中的
and和or运算符具有短路特性。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. 进阶提示
- range 的妙用:
range(10, 0, -1)可以生成10到1的倒序序列,这在需要反向遍历时很有用。 - enumerate 的 start 参数:默认索引从0开始,但可以通过
enumerate(iterable, start=1)让索引从1开始,更符合日常习惯。 - zip 处理不等长序列:当zip的多个序列长度不同时,会以最短的序列为准,多余元素会被忽略。如果需要以最长序列为准,可以使用
itertools.zip_longest。 - for-else 的使用场景:for-else结构非常适合搜索场景。当需要检查序列中是否存在满足条件的元素,如果找到就处理,如果没找到就执行默认操作时,for-else比设置标志变量更优雅。
- 遍历字典的顺序:在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(函数内)或抛异常来跳出多层循环。更好的做法是封装成函数。
更多推荐


所有评论(0)