五. 流程控制(条件与循环)
5.1 if-elif-else 完整结构
score = 85
if score >= 90:
grade = "A"
elif score >= 75:
grade = "B"
elif score >= 60:
grade = "C"
else:
grade = "D"
# 三元表达式(条件表达式)
age = 17
status = "成人" if age >= 18 else "未成年"
print(status)
5.2 while 循环(有条件循环)
# 经典:1+2+...+100
total = 0
i = 1
while i <= 100:
total += i
i += 1
print(total) # 5050
# 无限循环 + break
while True:
cmd = input("输入 'exit' 退出:")
if cmd == "exit":
break
print("你输入了:", cmd)
5.3 for 循环(迭代循环)
# 遍历字符串
for ch in "hello":
print(ch)
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# range(start, stop, step)
for i in range(10): # 0..9
print(i)
for i in range(2, 10, 2): # 2,4,6,8
print(i)
# 倒序
for i in range(10, 0, -1):
print(i)
5.4 break, continue, else 子句
# 查找列表中是否存在某个数
numbers = [3, 7, 2, 9, 5]
target = 2
for num in numbers:
if num == target:
print("找到了")
break
else:
# 如果循环正常结束(没有break)则执行else
print("没找到")
# continue 示例:打印奇数
for i in range(10):
if i % 2 == 0:
continue
print(i) # 1,3,5,7,9
5.5 循环中的常见陷阱
死循环:忘记更新循环变量
i = 0
while i < 5:
print(i) # 缺少 i+=1
修改正在遍历的列表:可能导致跳过元素或异常,应遍历副本
lst = [1,2,3,4]
for item in lst[:]: # 用切片副本
if item % 2 == 0:
lst.remove(item)
六. 常用数据结构(深入)
6.1 列表(list):可变序列
# 创建
empty = []
nums = [1, 2, 3]
mixed = [1, "hello", 3.14]
matrix = [[1,2], [3,4]] # 二维列表
# 索引与切片
nums = [10, 20, 30, 40, 50]
print(nums[0]) # 10
print(nums[-1]) # 50
print(nums[1:4]) # [20,30,40] 结束索引不包含
print(nums[:3]) # [10,20,30]
print(nums[2:]) # [30,40,50]
print(nums[::2]) # [10,30,50] 步长2
# 列表常用方法
nums.append(60) # 末尾添加
nums.insert(0, 5) # 索引0插入5
nums.extend([70,80]) # 合并列表
nums.pop() # 删除并返回最后一个
nums.pop(2) # 删除索引2的元素
nums.remove(30) # 删除第一个值为30的元素
del nums[1] # 删除索引1
nums.sort() # 升序排序(原地)
nums.reverse() # 反转
sorted_nums = sorted(nums) # 返回新排序列表
len(nums) # 长度
max(nums), min(nums), sum(nums)
# 列表推导式(强大特性)
squares = [x**2 for x in range(10)] # [0,1,4,...,81]
evens = [x for x in range(20) if x % 2 == 0]
matrix_flat = [num for row in matrix for num in row] # 展平
6.2 元组(tuple):不可变序列
# 创建
t = (1, 2, 3)
single = (5,) # 注意逗号,否则是整数
empty = ()
# 解包
a, b, c = t
print(a, b, c) # 1 2 3
# 元组不可变,但若元素是列表则可修改元素内容
t2 = ([1,2], 3)
t2[0].append(3) # 可以,因为修改的是列表对象本身
# t2[0] = [4,5] # 错误,不能替换元素
6.3 字典(dict):键值映射
# 创建
person = {"name": "张三", "age": 25, "city": "北京"}
# 或
person = dict(name="张三", age=25)
# 访问
print(person["name"]) # 键不存在会报 KeyError
print(person.get("gender", "未知")) # 安全访问,可设默认值
# 添加/修改
person["age"] = 26
person["gender"] = "男"
# 删除
del person["city"]
age = person.pop("age") # 删除并返回值
# 遍历
for key in person:
print(key, person[key])
for key, value in person.items():
print(f"{key}: {value}")
# 字典推导式
squares_dict = {x: x**2 for x in range(5)} # {0:0,1:1,2:4,3:9,4:16}
# 合并字典(Python 3.9+)
d1 = {"a":1, "b":2}
d2 = {"c":3, "d":4}
merged = d1 | d2 # 或 {**d1, **d2}
6.4 集合(set):无序不重复
# 创建
s = {1, 2, 3, 3} # {1,2,3},自动去重
empty_set = set() # {} 是空字典
# 添加删除
s.add(4)
s.remove(2) # 不存在会报错
s.discard(5) # 不存在也不报错
s.pop() # 随机删除一个元素
# 集合运算
a = {1,2,3}
b = {3,4,5}
print(a | b) # 并集 {1,2,3,4,5}
print(a & b) # 交集 {3}
print(a - b) # 差集 {1,2}
print(a ^ b) # 对称差 {1,2,4,5}
# 去重常用:list(set([1,2,2,3])) -> [1,2,3]
6.5 字符串高级操作(非常重要)
s = " Hello, World! "
# 去除空白
s.strip() # "Hello, World!" (去掉首尾空格)
s.lstrip() # 去除左边
s.rstrip() # 去除右边
# 大小写转换
s.lower() # " hello, world! "
s.upper() # " HELLO, WORLD! "
s.capitalize() # " hello, world! " (首字母大写)
s.title() # " Hello, World! "
# 查找与替换
s.find("World") # 返回索引 8,找不到返回 -1
s.index("World") # 类似,但找不到抛出 ValueError
s.replace("World", "Python") # " Hello, Python! "
s.count("l") # 3
# 分割与连接
words = s.split() # 默认按空白分割 -> ['Hello,', 'World!']
s.split(",") # [' Hello', ' World! ']
",".join(["a","b","c"]) # "a,b,c"
# 判断开头/结尾
s.startswith(" Hello") # True
s.endswith("!") # True
# 判断内容
s.isalpha() # 是否全是字母
s.isdigit() # 是否全是数字
s.isalnum() # 字母或数字
# 格式化(f-string已覆盖)