流程控制
程序的执行流程主要有三种:顺序、分支、循环。
条件判断
if 语句
age = 18
if age >= 18:
print("你是成年人")
if-else 语句
age = 16
if age >= 18:
print("你是成年人")
else:
print("你是未成年人")
if-elif-else 语句
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"成绩等级: {grade}")
嵌套条件
age = 25
has_ticket = True
if age >= 18:
if has_ticket:
print("可以入场")
else:
print("请先购票")
else:
print("未成年人需要监护人陪同")
条件表达式(三元运算符)
age = 20
status = "成年" if age >= 18 else "未成年"
print(status) # 成年
# 等价于
if age >= 18:
status = "成年"
else:
status = "未成年"
典型案例:登录验证
# 用户登录验证
correct_username = "admin"
correct_password = "123456"
username = input("用户名: ")
password = input("密码: ")
if username == correct_username and password == correct_password:
print("登录成功!")
elif username != correct_username:
print("用户名不存在")
else:
print("密码错误")
典型案例:计算器
# 简单计算器
num1 = float(input("第一个数: "))
operator = input("运算符 (+, -, *, /): ")
num2 = float(input("第二个数: "))
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 != 0:
result = num1 / num2
else:
result = "错误:除数不能为0"
else:
result = "错误:不支持的运算符"
print(f"结果: {result}")
match-case 语句(Python 3.10+)
Python 3.10 引入了结构化模式匹配。
command = "start"
match command:
case "start":
print("启动程序")
case "stop":
print("停止程序")
case "restart":
print("重启程序")
case _:
print("未知命令")
# 带条件的匹配
def describe_number(n):
match n:
case 0:
return "零"
case n if n > 0:
return "正数"
case n if n < 0:
return "负数"
# 解构匹配
point = (3, 4)
match point:
case (0, 0):
print("原点")
case (x, 0):
print(f"在x轴上,x={x}")
case (0, y):
print(f"在y轴上,y={y}")
case (x, y):
print(f"点({x}, {y})")
循环
for 循环
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(fruit)
# 遍历字符串
for char in "Hello":
print(char)
# 遍历字典
person = {"name": "张三", "age": 25}
for key, value in person.items():
print(f"{key}: {value}")
# 使用 range()
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(1, 6): # 1, 2, 3, 4, 5
print(i)
for i in range(0, 10, 2): # 0, 2, 4, 6, 8(步长2)
print(i)
for i in range(5, 0, -1): # 5, 4, 3, 2, 1(倒序)
print(i)
enumerate() 获取索引
fruits = ["苹果", "香蕉", "橙子"]
# 方式一:使用 enumerate
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# 从1开始计数
for index, fruit in enumerate(fruits, 1):
print(f"{index}: {fruit}")
# 方式二:使用 range(不推荐)
for i in range(len(fruits)):
print(f"{i}: {fruits[i]}")
while 循环
# 基本 while 循环
count = 0
while count < 5:
print(count)
count += 1
# 用户输入验证
password = ""
while password != "123456":
password = input("请输入密码: ")
print("密码正确!")
典型案例:猜数字游戏
import random
target = random.randint(1, 100)
guess = 0
attempts = 0
print("猜数字游戏!范围 1-100")
while guess != target:
guess = int(input("请猜一个数: "))
attempts += 1
if guess < target:
print("太小了!")
elif guess > target:
print("太大了!")
else:
print(f"恭喜你猜对了!用了 {attempts} 次")
break 和 continue
# break:立即跳出循环
for i in range(10):
if i == 5:
break
print(i) # 输出 0, 1, 2, 3, 4
# continue:跳过本次循环
for i in range(10):
if i % 2 == 0:
continue
print(i) # 输出 1, 3, 5, 7, 9
# 实际应用:查找第一个偶数
numbers = [1, 3, 5, 8, 9, 10]
for num in numbers:
if num % 2 == 0:
print(f"找到第一个偶数: {num}")
break
for-else 和 while-else
循环正常结束时执行 else,break 跳出时不执行。
# 查找元素
numbers = [1, 3, 5, 7, 9]
target = 4
for num in numbers:
if num == target:
print(f"找到 {target}")
break
else:
print(f"{target} 不在列表中")
# 判断质数
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 使用 for-else 判断质数
n = 17
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
print(f"{n} 不是质数")
break
else:
print(f"{n} 是质数")
嵌套循环
# 打印乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print()
# 输出:
# 1×1=1
# 1×2=2 2×2=4
# 1×3=3 2×3=6 3×3=9
# ...
典型案例:打印图形
# 打印三角形
n = 5
for i in range(1, n + 1):
print("*" * i)
# *
# **
# ***
# ****
# *****
# 打印倒三角形
for i in range(n, 0, -1):
print("*" * i)
# 打印金字塔
for i in range(1, n + 1):
spaces = " " * (n - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)
# *
# ***
# *****
# *******
# *********
推导式
推导式是 Python 特有的简洁语法。
列表推导式
# 基本形式
squares = [x**2 for x in range(1, 6)]
# [1, 4, 9, 16, 25]
# 带条件
evens = [x for x in range(10) if x % 2 == 0]
# [0, 2, 4, 6, 8]
# 嵌套循环
matrix = [(i, j) for i in range(3) for j in range(3)]
# [(0,0), (0,1), (0,2), (1,0), (1,1), (1,2), (2,0), (2,1), (2,2)]
# if-else
labels = ["偶数" if x % 2 == 0 else "奇数" for x in range(5)]
# ['偶数', '奇数', '偶数', '奇数', '偶数']
字典推导式
# 基本形式
squares = {x: x**2 for x in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 键值互换
original = {"a": 1, "b": 2, "c": 3}
swapped = {v: k for k, v in original.items()}
# {1: 'a', 2: 'b', 3: 'c'}
# 带条件
words = ["apple", "banana", "cherry"]
lengths = {w: len(w) for w in words if len(w) > 5}
# {'banana': 6, 'cherry': 6}
集合推导式
# 基本形式
squares = {x**2 for x in range(-3, 4)}
# {0, 1, 4, 9}(自动去重)
# 从字符串提取元音
text = "Hello, World!"
vowels = {c.lower() for c in text if c.lower() in "aeiou"}
# {'e', 'o'}
生成器表达式
# 生成器不立即计算,节省内存
gen = (x**2 for x in range(1000000))
print(next(gen)) # 1
print(next(gen)) # 4
# 用于求和等场景
total = sum(x**2 for x in range(100))
典型案例:数据处理
# 学生成绩处理
students = [
{"name": "张三", "score": 85},
{"name": "李四", "score": 92},
{"name": "王五", "score": 58},
{"name": "赵六", "score": 76}
]
# 获取所有姓名
names = [s["name"] for s in students]
# 获取及格学生
passed = [s for s in students if s["score"] >= 60]
# 创建成绩字典
score_dict = {s["name"]: s["score"] for s in students}
# 计算平均分
avg = sum(s["score"] for s in students) / len(students)
print(f"平均分: {avg:.2f}")
练习
练习1:FizzBuzz
# 经典面试题
for i in range(1, 101):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
练习2:找出所有质数
def find_primes(n):
primes = []
for num in range(2, n + 1):
is_prime = True
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
primes.append(num)
return primes
print(find_primes(50))
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
练习3:斐波那契数列
def fibonacci(n):
fib = [0, 1]
for i in range(2, n):
fib.append(fib[-1] + fib[-2])
return fib[:n]
print(fibonacci(10))
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
小结
if-elif-else用于条件判断for循环用于遍历序列while循环用于条件循环break跳出循环,continue跳过本次- 推导式是 Python 简洁高效的语法
for-else在循环正常结束时执行 else