第 05 课 · 入门 · 19 分钟

Python for 循环

对一组值重复执行同样的工作,不用把同一行代码写很多遍。

遍历range累加器

打烊时,一天的流水躺在纸条上,一杯一行。循环可以一行行读,可总数在第一杯之前就得有个起点。累加器一开始应该装什么?

循环让一段代码处理很多值。for 循环从可迭代对象中依次取出每一项,赋给循环变量,然后执行一次循环体。报表、清洗和数据处理都离不开它。 你还会区分累加器和内置聚合。

遍历一个集合

循环变量会依次接收集合中的每个值。变量名应该描述元素本身,而不是索引。循环体需要缩进,每取出一个元素就执行一次。

orders = ["拿铁", "摩卡", "茶"]
for order in orders:
    print(order)

每个订单打印一行

range 产生数字

range(stop) 从 0 开始,到 stop 之前结束。range(start, stop) 从 start 开始。range(start, stop, step) 按 step 跳过。range 是惰性的:循环需要时才产生值。

print(list(range(3)))
print(list(range(2, 5)))
print(list(range(0, 10, 2)))

三种 range 写法

累加一个结果

在循环之前创建累加器,在循环内部更新它,循环结束后再使用。累加器可以是数字、列表或字符串。

prices = [4.5, 6.0, 3.25]
total = 0
for price in prices:
    total += price
print(f"总计:{total:.2f} 元")

用循环求和

让循环携带状态

累加器是跨迭代携带结果的变量。循环前初始化,循环内更新,循环后使用。如果更新写在循环外,只会保留最后一次的值。

prices = [4.5, 3.0, 6.25]
total = 0
count = 0
for price in prices:
    total += price
    count += 1
print(count, round(total, 2), round(total / count, 2))

一个循环,三个汇总值

只做聚合时,优先用内置函数

如果循环只是求和、计数、最大值或一个是/否判断,内置函数通常更清楚。any() 遇到第一个真值就停止,all() 遇到第一个假值就停止。需要多个结果或自定义控制流时,再用循环。

prices = [4.5, 3.0, 6.25]
print(sum(prices), len(prices), max(prices), min(prices))
print(any(price > 6 for price in prices))
print(all(price > 0 for price in prices))

选择更清楚的聚合方式

用 enumerate 保留行号

enumerate() 同时给出元素和位置,跳过一行时错误信息也不会错位。用 start 参数对齐人类习惯的行号。不要在遍历列表时删除元素;建立新列表,或者遍历副本。在收据项目里,行号正是错误信息有用的原因。

lines = ["Latte|2", "", "Tea|1"]
for line_no, line in enumerate(lines, 1):
    if not line:
        continue
    name, qty = line.split("|")
    print(line_no, name, int(qty))

跳过空行,位置仍然准确

本课要点

  • for item in items 会逐个访问每个值。
  • range(stop) 不包含 stop;range(start, stop) 包含 start。
  • 累加器必须在循环开始前初始化。
  • 缩进决定哪些代码属于循环体。
  • 累加器让循环变成汇总;简单聚合优先用内置函数。
  • enumerate(..., start=1) 让错误信息里的行号和人类看到的一致。

常见错误

  • 把累加器创建在循环内部,导致每次迭代都被重置。
  • 以为 range(5) 会包含 5。
  • 一边遍历列表一边修改它,导致漏掉元素。
  • 把累加更新写错缩进层级,只保留最后一次结果。
  • 一边遍历列表,一边删除其中的元素。
轮到你

遍历三个价格,把它们累加到 total,并打印保留两位小数的总价。

动手试试

改改变量、先预测输出,再运行代码。第一次点击“运行代码”时会下载 Python 运行时,可能需要几秒钟。

浏览器内 Python本地运行 · 无需账号
首次运行会从 CDN 下载 Pyodide。修改后点击“运行代码”。

练习本课

12 道题,作答后立即看到解释。

查看 12 道题答案开始练习
← 条件判断列表 →