RSS
菜单
全部文章快讯开发科技深度热点

控制流:if / for / while(Python 从精通到入门 · 24)

内容摘要

程序之所以有"智能",全靠它能在岔路口做选择、在重复里转圈。这一篇把 Python 的三种控制流一次讲透。

程序之所以有"智能",全靠它能在岔路口做选择、在重复里转圈。这一篇把 Python 的三种控制流一次讲透。

有了变量和运算符,接下来最关键的一步就是:让程序自己决定走哪条路、重复做哪件事。这就是控制流。

你将学到

  • if / elif / else 分支,以及 Python 的缩进哲学
  • while 循环,break / continue,还有冷门的 while ... else
  • for 循环与 range(),遍历序列、字典
  • 嵌套循环,以及怎么优雅地跳出多层
  • 三元表达式(条件一行写)
  • 三个动手小题:猜数字、九九乘法表、求素数

前置知识

先读 上一篇:运算符与表达式,特别是"真值测试"那节。

if / elif / else:分支

score = 85
if score >= 90:
    print("优秀")
elif score >= 60:
    print("及格")
else:
    print("不及格")
# 输出: 及格

elif 是 "else if" 的缩写,可以有多个。判断从上往下走,命中一个就整体结束:

n = 0
if n > 0:
    print("正数")
elif n == 0:
    print("零")
else:
    print("负数")
# 输出: 零

缩进哲学

Python 用缩进表示代码块,而不是花括号。这逼着你把代码写整齐。

# ❌ 缩进错误:IndentationError
# if True:
# print("没有缩进")

# ✅ 冒号后面统一缩进(推荐 4 个空格)
if True:
    print("这行在 if 块里")
print("这行不在 if 块里")

同一个代码块里缩进必须一致。混用 Tab 和空格是最坑的新手错误,统一用 4 个空格就没问题。

while 循环

while 在条件为真时反复执行。

count = 0
while count < 3:
    print(f"第 {count + 1} 次")
    count += 1     # 千万别忘了更新,否则死循环
# 输出: 第 1 次 / 第 2 次 / 第 3 次

break 与 continue

  • break:立刻跳出整个循环。
  • continue:跳过本次剩余代码,直接进入下一次。
# break:找到 5 就停
n = 1
while True:
    if n == 5:
        print("找到了", n)   # 输出: 找到了 5
        break
    n += 1

# continue:跳过偶数
for i in range(6):
    if i % 2 == 0:
        continue
    print(i, end=" ")
# 输出: 1 3 5

while ... else

一个很多人不知道的特性:循环正常结束(没被 break)时,执行 else。

n = 7
i = 2
while i < n:
    if n % i == 0:
        print(f"{n} 可以被 {i} 整除")
        break
    i += 1
else:
    print(f"{n} 是素数")
# 输出: 7 是素数(循环自然结束,没 break,触发 else)

这个 else 常用来表示"搜索了一圈都没找到"。

for 循环与 range()

for 用来遍历一个序列里的每个元素。

for ch in "abc":
    print(ch, end=" ")          # 输出: a b c

for fruit in ["苹果", "香蕉", "橘子"]:
    print(f"爱吃{fruit}")        # 输出: 爱吃苹果 / 爱吃香蕉 / 爱吃橘子

range() 三种用法

print(list(range(5)))        # 输出: [0, 1, 2, 3, 4]
print(list(range(2, 6)))     # 输出: [2, 3, 4, 5]
print(list(range(0, 10, 3))) # 输出: [0, 3, 6, 9]
print(list(range(5, 0, -1))) # 输出: [5, 4, 3, 2, 1](倒着数)

total = 0
for i in range(1, 101):      # 经典用法:循环 n 次
    total += i
print(total)                 # 输出: 5050

遍历字典

person = {"name": "小明", "age": 18}

for key, value in person.items():    # 同时拿到键和值(最常用)
    print(f"{key} = {value}")
# 输出: name = 小明 / age = 18

enumerate 与 zip

for i, fruit in enumerate(["苹果", "香蕉"]):   # 带索引
    print(i, fruit)
# 输出: 0 苹果 / 1 香蕉

names = ["小明", "小红"]
ages = [18, 20]
for name, age in zip(names, ages):             # 并行遍历
    print(f"{name} {age} 岁")
# 输出: 小明 18 岁 / 小红 20 岁

嵌套循环

循环里再套循环,通常用来处理"二维"的事情。

for i in range(1, 4):
    for j in range(1, 4):
        print(f"({i},{j})", end=" ")
    print()   # 每行结束换行
# 输出:
# (1,1) (1,2) (1,3)
# (2,1) (2,2) (2,3)
# (3,1) (3,2) (3,3)

想一次跳出多层循环,可以用标志变量(外层循环检查 found 再 break),或干脆把这段逻辑封进函数、用 return 退出,后者更清爽。

三元表达式

if 可以写成一行,叫三元表达式:值1 if 条件 else 值2

age = 20

if age >= 18:          # 普通写法
    label = "成年"
else:
    label = "未成年"

label = "成年" if age >= 18 else "未成年"   # ✅ 一行搞定
print(label)   # 输出: 成年

动手小题

练习一:猜数字

import random
target = random.randint(1, 100)
tries = 0
while True:
    guess = int(input("猜一个 1~100 的数字:"))
    tries += 1
    if guess < target:
        print("小了,再试试")
    elif guess > target:
        print("大了,再试试")
    else:
        print(f"猜对了!用了 {tries} 次")
        break

练习二:九九乘法表

for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}x{i}={i*j}", end="\t")
    print()
# 输出:
# 1x1=1
# 1x2=2   2x2=4
# 1x3=3   2x3=6  3x3=9
# ...

练习三:求素数(用 while ... else 的优雅写法)

primes = []
for n in range(2, 31):
    for d in range(2, n):
        if n % d == 0:
            break          # 找到因子,不是素数
    else:
        primes.append(n)   # 没 break,说明是素数
print(primes)
# 输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

常见坑

坑一:死循环

# ❌ 忘了更新变量,程序卡死
# n = 0
# while n < 5:
#     print(n)

# ✅
n = 0
while n < 5:
    print(n)
    n += 1

坑二:for 循环中改列表

nums = [1, 2, 3, 4, 5]

# ❌ 边遍历边删除,会漏掉元素
# for x in nums:
#     if x % 2 == 0:
#         nums.remove(x)

# ✅ 生成新列表
nums = [x for x in nums if x % 2 != 0]
print(nums)   # 输出: [1, 3, 5]

坑三:误以为 else 只在条件为假时执行

# ✅ 记住:while/for-else 的执行条件 = "循环没被 break"
for i in [1, 2, 3]:
    print(i)
else:
    print("正常结束")   # 输出: 正常结束

坑四:忘记 int() 转换导致比较出错

# ❌ input 返回字符串,跟数字比较会 TypeError
# age = input("年龄:")
# if age > 18: ...

# ✅
age = int(input("年龄:"))
if age > 18:
    print("成年")

小结

  • if / elif / else 从上往下匹配,命中即止;缩进用 4 个空格。
  • while 用于条件驱动的循环,注意别死循环。
  • break 跳出整个循环,continue 跳过本次。
  • while / for 的 else 在"循环未被 break"时执行,适合"搜索未果"场景。
  • range()、enumerate()、zip() 是 for 循环的三大好帮手。
  • 嵌套循环处理二维问题,跳多层用标志变量或函数封装。
  • 三元表达式 A if 条件 else B 能一行解决简单分支。
  • 猜数字、九九乘法表、求素数是三个经典练手题,值得亲手敲一遍。

延伸阅读

  • 25-函数基础:把上面这些逻辑装进函数,代码会清爽很多
  • 27-列表元组字典集合:循环遍历的各种容器

上一篇:运算符与表达式 · 下一篇:函数基础

— 全文完 —回到顶部 ↑
下载推广海报

文章推广海报

《控制流:if / for / while(Python 从精通到入门 · 24)》完整推广海报
DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。