Python控制流完全指南

Python控制流完全指南:从if判断到循环,一篇就够了

今天我们来聊聊Python编程中最重要的基石之一------控制流。简单来说,控制流决定了你的程序在什么条件下执行什么代码,以及如何重复执行某段代码。掌握它,你就能写出逻辑清晰、功能强大的程序。

一、缩进:Python的"灵魂"与"骨架"

在正式开始之前,我们必须先聊聊Python最独特、也最重要的语法规则:缩进

在其他编程语言(如C、Java)中,代码块通常用花括号 {} 来界定。但在Python中,代码块是通过缩进来表示的。同一层级的代码必须拥有相同的缩进量(通常是4个空格或1个Tab)。

为什么缩进如此重要?

  1. 语法强制 :缩进错误会导致程序直接报错 IndentationError,无法运行。
  2. 代码可读性:强制缩进让代码结构一目了然,强迫开发者写出整洁、规范的代码。

示例:

python 复制代码
# 正确的缩进
age = 18
if age >= 18:
    print("你已经成年了。")  # 这行缩进了4个空格,属于if代码块
    print("欢迎来到成人世界。") # 同样缩进,属于if代码块
    print("这句话无论age是多少都会执行。") # 没有缩进,与if同级

# 错误的缩进
# if age >= 18:
# print("缩进错误!")  # 这行没有缩进,会报错

核心规则

  • 使用4个空格作为标准缩进(PEP 8推荐)。
  • 不要混用Tab和空格,这会导致难以排查的错误。大多数现代IDE(如PyCharm、VS Code)会自动将Tab转换为空格。

二、if 判断语句:让程序拥有"大脑"

if 语句是程序做决策的基础。它根据一个条件(布尔表达式)的真假,来决定是否执行特定的代码块。

1. 基本语法

python 复制代码
if 条件:
条件为真时执行的代码块

示例:

python 复制代码
score = 85
if score >= 60:
    print("恭喜,考试及格了!")

2. if-else 结构

当条件为假时,执行另一段代码。

python 复制代码
if 条件:
条件为真时执行的代码块
else:
条件为假时执行的代码块

示例:

python 复制代码
temperature = 30
if temperature > 25:
    print("今天很热,开空调吧。")
else:
    print("今天很凉爽,出去走走。")

3. if-elif-else 结构

当有多个条件需要依次判断时,使用 elif(是 else if 的缩写)。

python 复制代码
if 条件1:
条件1为真时执行
elif 条件2:
条件1为假且条件2为真时执行
elif 条件3:
条件1和2为假且条件3为真时执行
...
else:
所有条件都为假时执行

示例:

python 复制代码
score = 88
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}")  # 输出:你的成绩等级是:B

注意if-elif-else从上到下 依次判断的,一旦某个条件为真,执行完对应的代码块后,就会跳过 整个 if-elif-else 结构。

三、三元表达式:简洁的条件赋值

三元表达式是 if-else 的一种简洁写法,常用于根据条件给变量赋值。

语法:

python 复制代码
变量 = 值1 if 条件 else 值2

如果条件为真,变量被赋值为 值1,否则为 值2

示例:

python 复制代码
# 传统写法
age = 20
if age >= 18:
    status = "成年人"
else:
    status = "未成年人"

# 三元表达式写法
status = "成年人" if age >= 18 else "未成年人"
print(status)  # 输出:成年人

适用场景 :当 if-else 结构非常简单,且目的是为了赋值时,使用三元表达式可以让代码更简洁。但不要滥用,过于复杂的嵌套会降低可读性。

四、for 循环:遍历一切可迭代对象

for 循环用于遍历一个可迭代对象(如列表、字符串、元组、字典、集合、range等)中的每一个元素。

1. 遍历列表

python 复制代码
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
    print(f"我喜欢吃{fruit}")
# 输出:
# 我喜欢吃苹果
# 我喜欢吃香蕉
# 我喜欢吃橘子

2. 遍历字符串

python 复制代码
for char in "Python":
    print(char)
# 输出:P y t h o n (每个字母占一行)

3. 使用 range() 函数

range() 可以生成一个整数序列,常用于指定循环次数。

python 复制代码
# range(5) 生成 0, 1, 2, 3, 4
for i in range(5):
    print(f"这是第{i+1}次循环")

# range(2, 6) 生成 2, 3, 4, 5
for i in range(2, 6):
    print(i)

# range(1, 10, 2) 生成 1, 3, 5, 7, 9 (步长为2)
for i in range(1, 10, 2):
    print(i)

4. 遍历字典

python 复制代码
student = {"name": "小明", "age": 18, "score": 95}
# 遍历键
for key in student:
    print(key)  # 输出:name age score

# 遍历值
for value in student.values():
    print(value) # 输出:小明 18 95

# 同时遍历键和值
for key, value in student.items():
    print(f"{key}: {value}")

五、while 循环:条件为真,循环不止

while 循环会在条件为真时,重复执行代码块,直到条件变为假。

语法:

python 复制代码
while 条件:
循环体代码块

示例:

python 复制代码
count = 0
while count < 5:
	print(f"当前计数:{count}")
	count += 1  # 重要!必须更新条件,否则会变成无限循环
	print("循环结束")

注意while 循环必须确保条件最终会变为 False,否则程序会陷入无限循环 。如果程序卡住了,可以按 Ctrl+C 强制终止。

六、循环控制:break 和 continue

在循环执行过程中,我们有时需要提前退出或跳过某次迭代,这时就需要 breakcontinue

1. break:立即终止整个循环

break 用于完全退出当前所在的循环体,不再执行循环中剩余的迭代。

示例:

python 复制代码
# 查找列表中第一个大于10的数字
numbers = [3, 7, 12, 5, 20]
for num in numbers:
if num > 10:
	print(f"找到第一个大于10的数字:{num}")
	break  # 找到后立即退出循环
print(f"检查数字:{num},不符合条件")
# 输出:
# 检查数字:3,不符合条件
# 检查数字:7,不符合条件
# 找到第一个大于10的数字:12

2. continue:跳过本次循环,进入下一次

continue 用于跳过 当前这次迭代中 continue 之后的所有代码,直接进入下一次循环的判断。

示例:

python 复制代码
# 打印1到10之间的所有奇数
for i in range(1, 11):
if i % 2 == 0:  # 如果是偶数
	continue    # 跳过本次循环,不执行下面的print
print(i)
# 输出:1 3 5 7 9 (每个数字占一行)

总结区别

  • break终止整个循环。
  • continue跳过当前这一次,继续下一次。

七、综合示例:猜数字游戏

写一个简单的猜数字游戏。

python 复制代码
import random

# 1. 生成一个1到100之间的随机数
target_number = random.randint(1, 100)
guess_count = 0
max_attempts = 7

print("欢迎来到猜数字游戏!")
print(f"我已经想好了一个1到100之间的数字,你有{max_attempts}次机会。")

# 2. 使用while循环,让玩家可以多次猜测
while guess_count < max_attempts:
# 3. 获取玩家输入
	try:
		guess = int(input("请输入你的猜测:"))
	except ValueError:
		print("请输入一个有效的整数!")
		continue  # 输入无效,跳过本次循环,不消耗次数
	
	guess_count += 1

	# 4. 使用if-elif-else进行判断
	if guess == target_number:
		print(f"恭喜你!猜对了!就是{target_number}。你用了{guess_count}次。")
		break  # 猜对了,使用break退出循环
	elif guess < target_number:
		print("猜小了,再大一点。")
	else:
		print("猜大了,再小一点。")
	
	# 5. 使用if判断是否还有机会
	remaining = max_attempts - guess_count
	if remaining > 0:
		print(f"你还有{remaining}次机会。")
	else:
		print(f"很遗憾,机会用完了。正确的数字是:{target_number}")

print("游戏结束。")

总结

概念 作用 关键点
缩进 定义代码块 4个空格,同一层级必须对齐
if-elif-else 条件判断,分支执行 从上到下判断,执行一个分支后跳出
三元表达式 简洁的条件赋值 值1 if 条件 else 值2
for循环 遍历可迭代对象 常用于固定次数的循环或遍历集合
while循环 条件循环 注意更新条件,防止无限循环
break 立即终止整个循环 跳出循环体
continue 跳过本次循环的剩余部分 进入下一次迭代