Appearance
流程控制
流程控制语句用于控制程序的执行顺序。Python 提供了条件语句和循环语句来控制程序流程。
条件语句
if 语句
python
# 基本 if 语句
age = 18
if age >= 18:
print("已成年")
# if-else 语句
score = 55
if score >= 60:
print("及格")
else:
print("不及格")
# if-elif-else 语句
grade = 85
if grade >= 90:
print("优秀")
elif grade >= 80:
print("良好")
elif grade >= 60:
print("及格")
else:
print("不及格")
# 嵌套 if 语句
age = 25
has_license = True
if age >= 18:
if has_license:
print("可以驾驶")
else:
print("需要考取驾照")
else:
print("年龄不够")条件表达式
python
# 三元运算符
age = 20
status = "成年" if age >= 18 else "未成年"
print(status)
# 嵌套条件表达式
score = 75
grade = "优秀" if score >= 90 else ("良好" if score >= 80 else "及格")
print(grade)
# 实际应用
x = 10
result = x if x > 0 else -x # 绝对值
print(f"绝对值:{result}")多条件判断
python
# 使用 and 连接多个条件
age = 25
has_id = True
if age >= 18 and has_id:
print("允许进入")
# 使用 or 连接多个条件
role = "admin"
if role == "admin" or role == "superuser":
print("有管理员权限")
# 使用 not
is_banned = False
if not is_banned:
print("用户正常")
# 使用 in 检查多个值
day = "周六"
if day in ["周六", "周日"]:
print("周末")
else:
print("工作日")循环语句
while 循环
python
# 基本 while 循环
count = 1
while count <= 5:
print(f"计数:{count}")
count += 1
# 计算 1 到 100 的和
total = 0
num = 1
while num <= 100:
total += num
num += 1
print(f"1到100的和:{total}") # 5050
# while-else 结构
n = 10
while n > 0:
print(n)
n -= 1
else:
print("倒计时结束")
# 无限循环(需要 break 退出)
# while True:
# response = input("输入 quit 退出:")
# if response == "quit":
# breakfor 循环
python
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
# 遍历字符串
for char in "Python":
print(char)
# 使用 range() 函数
# range(stop):0 到 stop-1
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# range(start, stop):start 到 stop-1
for i in range(2, 6):
print(i) # 2, 3, 4, 5
# range(start, stop, step):指定步长
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8
# 倒序
for i in range(5, 0, -1):
print(i) # 5, 4, 3, 2, 1
# 遍历字典
person = {"name": "张三", "age": 25, "city": "北京"}
# 遍历键
for key in person:
print(key)
# 遍历值
for value in person.values():
print(value)
# 遍历键值对
for key, value in person.items():
print(f"{key}: {value}")
# for-else 结构
for i in range(5):
print(i)
else:
print("循环正常结束")enumerate() 和 zip()
python
# enumerate():获取索引和值
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# 指定起始索引
for index, fruit in enumerate(fruits, start=1):
print(f"{index}: {fruit}")
# zip():并行遍历多个序列
names = ["张三", "李四", "王五"]
ages = [25, 30, 28]
cities = ["北京", "上海", "广州"]
for name, age, city in zip(names, ages, cities):
print(f"{name}, {age}岁, 来自{city}")
# 创建字典
person_dict = dict(zip(names, ages))
print(person_dict)
# 长度不一致时以最短的为准
a = [1, 2, 3, 4, 5]
b = ['a', 'b', 'c']
for x, y in zip(a, b):
print(x, y) # 只输出 3 组循环控制
break 语句
python
# break:跳出整个循环
for i in range(10):
if i == 5:
break
print(i) # 0, 1, 2, 3, 4
# 查找元素
numbers = [1, 3, 5, 7, 9, 2, 4]
target = 7
index = -1
for i, num in enumerate(numbers):
if num == target:
index = i
break
print(f"找到 {target} 在索引 {index}")
# 嵌套循环中的 break
for i in range(3):
for j in range(3):
if i == 1 and j == 1:
break # 只跳出内层循环
print(f"({i}, {j})")
# else 不会执行(因为 break 了)
for i in range(5):
if i == 3:
break
else:
print("循环正常结束") # 不会执行continue 语句
python
# continue:跳过本次循环,继续下一次
for i in range(10):
if i % 2 == 0:
continue # 跳过偶数
print(i) # 1, 3, 5, 7, 9
# 过滤特定值
numbers = [1, -2, 3, -4, 5, -6]
positive = []
for num in numbers:
if num < 0:
continue
positive.append(num)
print(positive) # [1, 3, 5]
# continue 在 while 中
count = 0
while count < 5:
count += 1
if count == 3:
continue
print(count) # 1, 2, 4, 5pass 语句
python
# pass:占位语句,什么都不做
# 空的 if 语句
if True:
pass # TODO: 稍后实现
# 空的函数
def my_function():
pass # TODO: 稍后实现
# 空的类
class MyClass:
pass
# 空的循环
for i in range(10):
pass # 什么都不做列表推导式
基本语法
python
# 基本形式:[表达式 for 变量 in 可迭代对象]
numbers = [1, 2, 3, 4, 5]
squares = [x ** 2 for x in numbers]
print(squares) # [1, 4, 9, 16, 25]
# 带条件:[表达式 for 变量 in 可迭代对象 if 条件]
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
# 带条件表达式
result = ["偶数" if x % 2 == 0 else "奇数" for x in range(5)]
print(result) # ['偶数', '奇数', '偶数', '奇数', '偶数']嵌套循环
python
# 嵌套 for 循环
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 等价于:
flattened = []
for row in matrix:
for num in row:
flattened.append(num)
# 生成坐标对
coords = [(x, y) for x in range(3) for y in range(3)]
print(coords)
# 带条件的嵌套循环
pairs = [(x, y) for x in range(3) for y in range(3) if x != y]
print(pairs)字典和集合推导式
python
# 字典推导式
words = ["apple", "banana", "cherry"]
word_length = {word: len(word) for word in words}
print(word_length) # {'apple': 5, 'banana': 6, 'cherry': 6}
# 交换键值
original = {"a": 1, "b": 2, "c": 3}
swapped = {v: k for k, v in original.items()}
print(swapped) # {1: 'a', 2: 'b', 3: 'c'}
# 集合推导式
numbers = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
unique = {x for x in numbers}
print(unique) # {1, 2, 3, 4}
# 带条件的集合推导式
evens = {x for x in range(10) if x % 2 == 0}
print(evens) # {0, 2, 4, 6, 8}生成器表达式
python
# 生成器表达式:使用圆括号
numbers = (x ** 2 for x in range(10))
print(numbers) # <generator object>
# 生成器是惰性求值的
for num in numbers:
print(num, end=" ") # 0 1 4 9 16 25 36 49 64 81
# 使用 sum() 等函数
total = sum(x for x in range(100))
print(f"\n1到99的和:{total}")
# 内存效率对比
import sys
# 列表推导式:立即生成所有元素
list_comp = [x for x in range(10000)]
print(f"列表占用内存:{sys.getsizeof(list_comp)} 字节")
# 生成器表达式:惰性生成
gen_exp = (x for x in range(10000))
print(f"生成器占用内存:{sys.getsizeof(gen_exp)} 字节")实际应用示例
打印图形
python
# 打印矩形
print("矩形:")
for i in range(4):
for j in range(6):
print("*", end=" ")
print()
# 打印直角三角形
print("\n直角三角形:")
for i in range(1, 6):
for j in range(i):
print("*", end=" ")
print()
# 打印等腰三角形
print("\n等腰三角形:")
n = 5
for i in range(1, n + 1):
# 打印空格
for j in range(n - i):
print(" ", end=" ")
# 打印星号
for k in range(2 * i - 1):
print("*", end=" ")
print()
# 打印九九乘法表
print("\n九九乘法表:")
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print()查找和排序
python
# 线性查找
def linear_search(arr, target):
for i, item in enumerate(arr):
if item == target:
return i
return -1
numbers = [64, 34, 25, 12, 22, 11, 90]
print(f"查找 22 的索引:{linear_search(numbers, 22)}")
# 冒泡排序
def bubble_sort(arr):
arr = arr.copy() # 不修改原数组
n = len(arr)
for i in range(n - 1):
for j in range(n - 1 - i):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
return arr
print(f"排序后:{bubble_sort(numbers)}")
# 找出列表中的最大值和最小值
def find_max_min(arr):
if not arr:
return None, None
max_val = min_val = arr[0]
for num in arr[1:]:
if num > max_val:
max_val = num
if num < min_val:
min_val = num
return max_val, min_val
maximum, minimum = find_max_min(numbers)
print(f"最大值:{maximum},最小值:{minimum}")小结
本章我们学习了:
- 条件语句:if、if-else、if-elif-else
- 循环语句:while、for、range()
- 循环控制:break、continue、pass
- 推导式:列表推导式、字典推导式、集合推导式、生成器表达式
- 辅助函数:enumerate()、zip()
下一章,我们将学习 函数,了解 Python 函数的定义和使用。
