🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

通过Python的for和while语句来理解循环

要在电脑上通过命令提示符或 PowerShell 运行 Python,需要先下载并安装 Python。
如果你还没有安装,请参考Python安装与开发环境配置一文来完成安装。

各位Web开发者,大家好!在网站制作或日常业务中,您是否曾感觉“总是在重复同样的工作”?能将这种繁琐工作自动化的,就是编程中的“循环处理(循环)”。

本文为Python循环处理的基础——for语句while语句准备了大量即使是初学者也能立即上手的“可运行代码”。目的是让您首先体验“代码跑起来”的感觉,理论知识后续自然会跟上。请务必复制代码并粘贴运行,亲身感受循环带来的便利!


1. for语句:擅长重复固定次数!

for语句擅长从列表、字符串等多个元素集合的数据中,按顺序逐个取出元素进行处理。此外,它也用于预先确定好次数的处理,例如“重复10次”。

最基本的形式是 for 变量 in 数据集合:。让我们马上来看看具体的代码吧。

按顺序取出列表中的元素

例如,假设您有一个正在管理的网站分类列表。让我们来逐个显示这些分类的名称。


# 创建要显示的分类名称列表
categories = ["HTML", "CSS", "JavaScript", "Python", "网页设计"]

# 使用for语句从列表中逐个取出元素并显示在屏幕上
for category in categories:
  print(f"分类名: {category}")

# 执行结果:
# 分类名: HTML
# 分类名: CSS
# 分类名: JavaScript
# 分类名: Python
# 分类名: 网页设计
    

重复固定次数(range函数)

如果只是想单纯地重复固定次数的处理,比如“想创建5个博客文章样本”,使用range()函数会非常方便。写作range(5),它会按顺序生成从0到4的数字(关键点是它不包含5!)。


# 从0到4,总共循环5次
for i in range(5):
  # 使用f-string来显示这是第几次循环(i从0开始,所以要+1)
  print(f"这是第{i + 1}次处理。")

# 执行结果:
# 这是第1次处理。
# 这是第2次处理。
# 这是第3次处理。
# 这是第4次处理。
# 这是第5次处理。
    

在知晓元素序号的同时进行重复(enumerate函数)

在取出列表元素时,有时我们还想同时获得“当前是第几个元素”的信息。这时就可以使用enumerate()函数。在想以排行榜形式显示时非常有用。


# 热门文章排行榜列表
ranking = ["Python入门", "用CSS创建响应式设计", "JavaScript的异步处理"]

# 使用enumerate同时取出排名(索引)和文章标题(元素)
# 通过设置 start=1,可以让排名从1开始
for rank, title in enumerate(ranking, start=1):
  print(f"第{rank}名: {title}")

# 执行结果:
# 第1名: Python入门
# 第2名: 用CSS创建响应式设计
# 第3名: JavaScript的异步处理
    

2. while语句:在满足特定条件期间重复

while语句是一种“只要此条件为真(True),就继续处理”的循环类型。与for语句不同,它常用于重复次数不固定的情况。例如,在“持续处理直到用户输入特定字符”之类的交互式程序,或“持续处理直到处理时间超过10秒”等情况下大显身手。

其基本形式是 while 条件表达式:。只要条件表达式为True,内部的处理就会持续执行。

重复直到计数器达到特定数值

首先是一个简单的例子。我们准备一个计数器变量,只在该数值满足特定条件的期间内持续循环。需要注意的是,如果忘记在循环内更改计数器的值,就会陷入无限循环(后述)。


# 将计数器变量初始化为0
count = 0

# 在count小于5的期间内,持续循环
while count < 5:
  print(f"当前计数: {count}")
  # 这行很重要!将count的值增加1
  count += 1

print("循环已结束。")

# 执行结果:
# 当前计数: 0
# 当前计数: 1
# 当前计数: 2
# 当前计数: 3
# 当前计数: 4
# 循环已结束。
    

3. 应用示例:尝试用循环处理生成HTML文件

好了,让我们应用至今所学的知识,来看一个对Web开发者们来说更实用的例子。这是一个使用Python的循环处理来自动生成网站导航菜单HTML代码的程序。

执行这段代码后,会创建一个名为`navigation.html`的文件,其中写入了列表形式的菜单。这样就省去了手动编写多个<li>标签的麻烦!

【可完整运行的HTML示例】
以下代码本身就是Python脚本。如果您的本地环境安装了Python,将此代码保存为`generate_html.py`之类的文件名,然后在终端或命令提示符中执行`python generate_html.py`,就会在同一目录下生成`navigation.html`。


# -*- coding: utf-8 -*-

# 希望在菜单中显示的项目列表
menu_items = {
  "首页": "index.html",
  "关于我们": "about.html",
  "服务": "services.html",
  "博客": "blog.html",
  "联系我们": "contact.html"
}

# 用于存储HTML片段的变量
html_content = """<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>自动生成的导航</title>
  <style>
    body { font-family: sans-serif; }
    nav ul { list-style: none; padding: 0; display: flex; gap: 1rem; }
    nav a { text-decoration: none; color: #007BFF; padding: 0.5rem 1rem; border: 1px solid #ddd; border-radius: 5px; }
    nav a:hover { background-color: #f0f0f0; }
  </style>
</head>
<body>

  <h1>导航菜单</h1>
  <nav>
    <ul>
"""

# 使用for循环从字典中取出键(文本)和值(链接),生成<li>标签
for text, link in menu_items.items():
  html_content += f'      <li><a href="{link}">{text}</a></li>\n'

# 添加HTML的页脚部分
html_content += """    </ul>
  </nav>

</body>
</html>
"""

# 以"navigation.html"为名打开文件,并写入内容
try:
  with open("navigation.html", "w", encoding="utf-8") as f:
    f.write(html_content)
  print("✅ navigation.html 生成成功!")
except IOError as e:
  print(f"❌ 写入文件时发生错误: {e}")

    

4. 注意要点:循环控制技巧

循环处理非常方便,但为了避免意外行为,有几种控制方法是需要了解的。特别是“无限循环”、“break”和“continue”是重要的概念。

注意无限循环!

特别是在while语句中容易发生的是“无限循环”。这是一种由于用于结束循环的条件表达式永远保持为True,导致程序无法停止的现象。在下面的例子中,由于count的值没有变化,count < 5这个条件将永久满足。


# ⚠️ 此代码会陷入无限循环,执行时请注意!
count = 0
while count < 5:
  print("这条消息将无限显示下去…")
  # 缺少更新count值的处理(如 count += 1)!
    

中途跳出循环 (break)

在循环中途,有时希望在满足某个特定条件时完全终止处理。这时就可以使用break。例如,在列表中找到了特定元素后,后续的搜索就不再需要了。在这种时候break就很有用。


# 想要查找的文件
target_file = "python.png"
file_list = ["style.css", "index.html", "script.js", "python.png", "logo.svg"]

# 依次检查文件列表
for filename in file_list:
  print(f"检查中: {filename}")
  if filename == target_file:
    print(f"🎉 找到了!: {target_file}")
    # 找到了目标文件,所以跳出循环
    break

# 执行结果:
# 检查中: style.css
# 检查中: index.html
# 检查中: script.js
# 检查中: python.png
# 🎉 找到了!: python.png
    

可以看到,当break被执行后,循环在没有检查"logo.svg"的情况下就结束了。


仅跳过本次处理 (continue)

break会终止整个循环相对,continue是“仅跳过本次处理,进入下一次重复”的命令。例如,在想从大量文件中只处理图像文件(.jpg, .png)时,它非常方便。


file_list = ["memo.txt", "photo_01.jpg", "document.pdf", "photo_02.png", "archive.zip"]

# 循环文件列表
for filename in file_list:
  # 如果文件名不是以 ".jpg" 或 ".png" 结尾…
  if not (filename.endswith(".jpg") or filename.endswith(".png")):
    # …就跳过这次处理,进入下一个文件
    continue
  
  # 这一行仅在是图像文件时执行
  print(f"正在处理图像文件: {filename}")

# 执行结果:
# 正在处理图像文件: photo_01.jpg
# 正在处理图像文件: photo_02.png
    

总结

本次我们解说了Python循环处理的基础——for语句和while语句。

一开始可能会觉得困难,但请先从复制代码并让它运行起来开始,然后一点点地修改数值或列表内容,观察行为的变化。一旦掌握了循环处理,您的Web制作和业务效率必将大大提升!


作为下一步,要不要学习一下将处理整合在一起的“函数”呢?

讲解Python函数的创建和使用方法