控制流#
控制流语句用于控制程序的执行顺序,包括条件语句和循环语句。掌握控制流是编程的基础。
条件语句#
if 语句#
if 语句用于根据条件执行不同的代码块。
# 基本语法
if condition:
# 如果条件为True,执行这里的代码
statement
# 示例
age = 20
if age >= 18:
print("已成年")if-else 语句#
# 基本语法
if condition:
# 如果条件为True,执行这里
statement1
else:
# 如果条件为False,执行这里
statement2
# 示例
age = 15
if age >= 18:
print("已成年")
else:
print("未成年")if-elif-else 语句#
# 基本语法
if condition1:
statement1
elif condition2:
statement2
elif condition3:
statement3
else:
statement4
# 示例:成绩等级
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")嵌套条件语句#
age = 25
has_license = True
if age >= 18:
if has_license:
print("可以开车")
else:
print("需要先考驾照")
else:
print("未成年,不能开车")条件表达式的简化#
# 使用逻辑运算符简化
age = 25
has_license = True
if age >= 18 and has_license:
print("可以开车")
# 使用链式比较
x = 10
if 0 < x < 20:
print("x在0和20之间")循环语句#
for 循环#
for 循环用于遍历序列(如列表、字符串、元组等)。
# 基本语法
for item in sequence:
# 对每个item执行操作
statement
# 遍历列表
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
# 遍历字符串
for char in "Python":
print(char)
# 遍历字典
user = {"name": "Alice", "age": 30, "city": "Beijing"}
for key in user:
print(key, user[key])
for key, value in user.items():
print(key, value)range() 函数#
range() 函数生成一个数字序列,常用于 for 循环。
# 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, 5):
print(i) # 2, 3, 4
# 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
# 转换为列表
numbers = list(range(5)) # [0, 1, 2, 3, 4]enumerate() 函数#
enumerate() 函数同时获取索引和值。
# 基本用法
fruits = ["apple", "banana", "orange"]
for index, fruit in enumerate(fruits):
print(index, fruit)
# 输出:
# 0 apple
# 1 banana
# 2 orange
# 指定起始索引
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)
# 输出:
# 1 apple
# 2 banana
# 3 orangezip() 函数#
zip() 函数用于同时遍历多个序列。
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
# 同时遍历两个列表
for name, age in zip(names, ages):
print(f"{name} is {age} years old")
# 输出:
# Alice is 25 years old
# Bob is 30 years old
# Charlie is 35 years old
# 多个序列
cities = ["Beijing", "Shanghai", "Guangzhou"]
for name, age, city in zip(names, ages, cities):
print(f"{name}, {age}, {city}")
# zip() 返回的是迭代器,可以转换为列表
pairs = list(zip(names, ages)) # [('Alice', 25), ('Bob', 30), ('Charlie', 35)]while 循环#
while 循环在条件为 True 时重复执行代码块。
# 基本语法
while condition:
# 只要条件为True,就执行这里的代码
statement
# 示例:计数
count = 0
while count < 5:
print(count)
count += 1
# 示例:用户输入
while True:
user_input = input("输入'quit'退出: ")
if user_input == "quit":
break
print(f"你输入了: {user_input}")循环控制语句#
break 语句#
break 语句用于立即退出循环。
# 在for循环中使用break
for i in range(10):
if i == 5:
break # 当i等于5时退出循环
print(i) # 只打印 0, 1, 2, 3, 4
# 在while循环中使用break
count = 0
while True:
if count >= 5:
break
print(count)
count += 1continue 语句#
continue 语句用于跳过当前迭代,继续下一次迭代。
# 跳过偶数
for i in range(10):
if i % 2 == 0:
continue # 跳过偶数
print(i) # 只打印 1, 3, 5, 7, 9
# 跳过空值
items = [1, None, 2, None, 3]
for item in items:
if item is None:
continue
print(item) # 只打印 1, 2, 3pass 语句#
pass 语句是空操作,用于占位。
# 在循环中使用pass
for i in range(5):
if i == 2:
pass # 什么都不做,继续执行
print(i)
# 在条件语句中使用pass
if condition:
pass # 暂时不实现,避免语法错误
else:
print("else block")循环的 else 子句(重点难点)#
Python 的 for 和 while 循环可以有一个 else 子句,这是一个容易被忽视的特性。
重要:else 子句只有在循环正常结束(不是通过 break 退出)时才会执行。
# for循环的else子句
for i in range(5):
print(i)
else:
print("循环正常结束")
# 输出:
# 0
# 1
# 2
# 3
# 4
# 循环正常结束
# 如果使用break,else不会执行
for i in range(5):
if i == 3:
break
print(i)
else:
print("这行不会执行")
# 输出:
# 0
# 1
# 2
# while循环的else子句
count = 0
while count < 5:
print(count)
count += 1
else:
print("循环正常结束")
# 实际应用:查找元素
numbers = [1, 2, 3, 4, 5]
target = 6
for num in numbers:
if num == target:
print(f"找到了 {target}")
break
else:
print(f"没有找到 {target}")
# 输出:没有找到 6
# 如果target = 3,输出:找到了 3(else不会执行)使用场景:
- 搜索算法:如果找到目标就
break,否则执行else处理未找到的情况 - 验证:如果所有元素都满足条件,循环正常结束,执行
else
嵌套循环#
循环可以嵌套使用。
# 嵌套for循环:打印乘法表
for i in range(1, 4):
for j in range(1, 4):
print(f"{i} × {j} = {i*j}", end=" ")
print() # 换行
# 输出:
# 1 × 1 = 1 1 × 2 = 2 1 × 3 = 3
# 2 × 1 = 2 2 × 2 = 4 2 × 3 = 6
# 3 × 1 = 3 3 × 2 = 6 3 × 3 = 9
# 嵌套循环中使用break和continue
for i in range(3):
for j in range(3):
if j == 1:
break # 只退出内层循环
print(f"i={i}, j={j}")
# 输出:
# i=0, j=0
# i=1, j=0
# i=2, j=0循环中的变量作用域#
# 循环变量在循环外也可以访问
for i in range(3):
pass
print(i) # 2(最后的值)
# Python 3中,循环变量不会创建新的作用域
# 这与某些语言不同列表推导式中的条件#
列表推导式可以包含条件语句。
# 基本条件过滤
evens = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
# 条件表达式
result = [x if x > 0 else 0 for x in range(-3, 4)] # [0, 0, 0, 0, 1, 2, 3]
# 多重条件
result = [x for x in range(20) if x % 2 == 0 if x % 3 == 0] # [0, 6, 12, 18]常见模式#
遍历并修改列表#
# 错误的方式(不推荐)
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 危险!在遍历时修改列表
print(numbers) # 可能不是预期结果
# 正确的方式1:创建新列表
numbers = [1, 2, 3, 4, 5]
odds = [num for num in numbers if num % 2 != 0]
# 正确的方式2:使用切片复制
numbers = [1, 2, 3, 4, 5]
for num in numbers[:]: # 遍历副本
if num % 2 == 0:
numbers.remove(num)
# 正确的方式3:反向遍历
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers) - 1, -1, -1):
if numbers[i] % 2 == 0:
del numbers[i]无限循环#
# 使用while True创建无限循环
while True:
user_input = input("输入命令: ")
if user_input == "quit":
break
# 处理命令循环计数器#
# 使用enumerate
items = ["a", "b", "c"]
for index, item in enumerate(items):
print(f"{index}: {item}")
# 手动计数
count = 0
for item in items:
print(f"{count}: {item}")
count += 1性能考虑#
# 避免在循环中进行不必要的计算
# 不好的做法
for i in range(1000):
result = len(my_list) * 2 # len()在每次迭代都计算
# 好的做法
list_length = len(my_list) * 2
for i in range(1000):
result = list_length下一步#
掌握了控制流后,可以学习: