大数跨境
0
0

一文读懂 Python 循环语句:从基础到实战,效率提升指南

一文读懂 Python 循环语句:从基础到实战,效率提升指南 码途钥匙
2025-08-23
2

Python 编程世界里,重复执行某段代码是极为常见的需求 —— 比如遍历列表里的所有数据、反复验证用户输入、批量处理文件等。如果每次重复都手动复制代码,不仅效率低下,还会让代码变得臃肿杂乱。而循环语句,就是解决 “重复执行” 问题的 “金钥匙”。今天,我们就从基础到进阶,全面拆解 Python 中最核心的两种循环:for循环和while循环,再结合实战案例,教你如何用循环提升代码效率,避开常见坑点。


一、为什么需要循环?先看一个真实场景

假设你是一名数据分析师,需要计算一个包含 100 个数值的列表总和。如果不用循环,你可能会写出这样的代码:

nums = [1,2,3,...,100]  # 共100个数字total = 0total += nums[0]total += nums[1]total += nums[2]# ... 还要写97行类似代码print(total)

这显然不现实 —— 不仅要写 100 行重复代码,万一列表长度变成 1000,代码量还得翻倍。

而用循环,只需 3 行核心代码就能搞定:

nums = [1,2,3,...,100]total = 0for num in nums:  # 循环遍历列表total += numprint(total)  # 直接输出结果

这就是循环的价值:用固定代码,处理任意长度的重复任务,让代码更简洁、灵活、易维护。

二、Python 循环的 “两大支柱”:for 循环与 while 循环

Python 中只有两种核心循环结构,但能覆盖 99% 的重复场景。我们先从最常用的for循环讲起。

(一)for 循环:“逐个遍历” 的高效工具

for循环的核心逻辑是 **“遍历可迭代对象”**—— 比如列表、元组、字符串、字典等,依次取出其中的每个元素,执行对应的代码块。

1. 基础语法

for 变量名 in 可迭代对象:# 循环体:每次遍历要执行的代码(注意缩进!)代码语句1代码语句2# 循环结束后执行的代码(无缩进)

变量名:每次遍历从 “可迭代对象” 中取出的元素,会赋值给这个变量(比如遍历列表时,变量就是列表里的每个元素)。

  • 可迭代对象:能依次取出元素的对象,常见的有列表、字符串、range ()、字典等。

  • 缩进:Python 通过缩进区分代码块,循环体必须缩进(通常是 4 个空格),否则会报错。

2. 最常用的 3 种场景

场景 1:遍历列表 / 元组 / 字符串

这是for循环最基础的用法,直接依次取出每个元素:

# 1. 遍历列表(计算所有水果的长度)fruits = ["apple", "banana", "cherry"]for fruit in fruits:print(f"水果{fruit}的长度是:{len(fruit)}")# 2. 遍历字符串(打印每个字符)text = "Python"for char in text:print(char, end=" ")  # 输出:P y t h o n# 3. 遍历元组(统计偶数)nums = (1,2,3,4,5,6)even_count = 0for num in nums:if num % 2 == 0:even_count += 1print(f"元组中的偶数有{even_count}个")  # 输出:3
场景 2:用 range () 生成 “数字序列”

如果需要按 “数字顺序” 循环(比如循环 10 次、从 5 到 15 循环),可以用range()函数生成指定范围的数字序列。

range()的 3 种用法:

  • range(n):生成 0 到 n-1 的整数(比如 range (5) → 0,1,2,3,4)

  • range(start, end):生成 start 到 end-1 的整数(比如 range (2,6) → 2,3,4,5)

  • range(start, end, step):生成 start 到 end-1 的整数,步长为 step(比如 range (1,10,2) → 1,3,5,7,9)

实战案例:循环 10 次,打印 “第 n 次循环”:

for i in range(111):  # 从110(含10print(f"这是第{i}次循环")
场景 3:遍历字典(3 种方式)

字典是 “键值对” 结构,遍历方式和列表不同,需要区分 “遍历键”“遍历值”“遍历键值对”:

student = {"name""小明""age"18"score"95}# 1. 遍历字典的键(默认方式)for key in student:print(f"键:{key}")  # 输出:name, age, score# 2. 遍历字典的值(用.values())for value in student.values():print(f"值:{value}")  # 输出:小明, 18, 95# 3. 遍历键值对(用.items(),最常用)for key, value in student.items():print(f"{key}{value}")  # 输出:name:小明,age:18,score:95

(二)while 循环:“满足条件就继续” 的灵活选择

while循环的核心逻辑是 **“只要条件成立,就重复执行代码块”**—— 直到条件不成立时,循环才会停止。

适合场景:不确定循环次数,但知道 “循环停止的条件”(比如等待用户输入正确密码、直到某个变量达到目标值)。

1. 基础语法

      
      
      
while 条件表达式:
# 循环体:条件成立时执行的代码(需缩进)代码语句1代码语句2# (可选)更新条件相关的变量(避免死循环!)
  • 条件表达式:每次循环前会判断这个表达式的结果(True/False)。如果是 True,执行循环体;如果是 False,退出循环。

  • 关键提醒:循环体中必须有 “更新条件” 的代码(比如让变量自增、修改判断值),否则条件会一直成立,导致 “死循环”(代码永远执行下去,只能强制关闭程序)。

2. 经典实战案例

案例 1:直到用户输入正确密码才停止
# 正确密码correct_password = "123456"# 循环获取用户输入,直到正确while True:  # 先让循环“无限进行”password = input("请输入密码:")if password == correct_password:print("密码正确,欢迎登录!")break  # 密码正确,退出循环(break后面讲)else:print("密码错误,请重新输入!")
案例 2:计算 1 到 100 的总和(用 while 实现)
total = 0i = 1  # 初始值while i <= 100:  # 条件:i不大于100total += ii += 1  # 关键:更新i的值(否则i一直是1,死循环)print(f"1到100的总和是:{total}")  # 输出:5050
案例 3:避免死循环的 “安全写法”

如果担心条件判断失误导致死循环,可以加一个 “最大循环次数” 限制:

      
      
      
count = 0  # 记录循环次数max_count = 3  # 最大允许3次while count < max_count:password = input("请输入密码(最多3次机会):")if password == "123456":print("登录成功!")breakelse:count += 1remaining = max_count - countprint(f"密码错误,还剩{remaining}次机会")else:# 循环正常结束(没触发break)时执行print("3次密码错误,账号已锁定!")

三、循环控制:让循环更 “聪明”(break/continue/pass)

有时候,我们需要在循环中 “提前退出”“跳过某次循环” 或 “占位”,这就需要用到 3 个控制语句:break、continue、pass。

(一)break:直接终止整个循环

break的作用是 **“立即退出当前所在的循环”**,不管循环条件是否还成立。一旦执行break,循环体中break后面的代码不会执行,直接跳到循环外。

案例:遍历列表,找到 “banana” 就停止:

fruits = ["apple""banana""cherry""date"]for fruit in fruits:if fruit == "banana":print(f"找到目标水果:{fruit}")break  # 找到后立即退出循环print(f"当前遍历的水果:{fruit}")# 输出结果:# 当前遍历的水果:apple# 找到目标水果:banana

可以看到,循环在找到 “banana” 后就停止了,没有继续遍历 “cherry” 和 “date”。

(二)continue:跳过当前次循环,继续下一次

continue的作用是 **“跳过当前次循环的剩余代码,直接开始下一次循环”**—— 不会终止整个循环,只是跳过当前这一轮。

案例:遍历 1 到 10,只打印奇数(跳过偶数):

for i in range(111):if i % 2 == 0:  # 如果是偶数continue  # 跳过当前次循环的剩余代码print(i)  # 只有奇数会执行这行# 输出:1 3 5 7 9

当i是偶数时,continue会跳过print(i),直接进入下一次循环;只有奇数会执行print(i)。

(三)pass:占位符,让代码 “不报错”

pass是一个 “空语句”,没有实际功能,仅用于 “占位”—— 比如当你暂时没想好循环体写什么,又不想代码报错时,就可以用pass。

案例:先搭好循环结构,后续再补逻辑:

      
      
      
for i in range(5):#  TODO:后续要实现的逻辑pass  # 占位,避免语法错误while i < 10:#  TODO:待完善pass

四、进阶技巧:让循环更高效、更简洁

掌握基础后,这些进阶技巧能帮你写出更优雅的循环代码。

(一)循环嵌套:“循环里套循环”

当需要处理 “多层结构” 的数据(比如二维列表、表格)时,可以用 “循环嵌套”—— 外层循环控制 “行”,内层循环控制 “列”。

案例:打印一个 3x3 的乘法表:

# 外层循环:控制行数(1到3)for i in range(14):# 内层循环:控制每行的列数(1到i)for j in range(1, i+1):print(f"{j}×{i}={i*j}", end="\t")  # \t是制表符,让格式对齐print()  # 每行结束后换行# 输出结果:# 1×1=1# 1×2=2        2×2=4# 1×3=3        2×3=6        3×3=9

(二)列表推导式:用一行代码实现 “循环 + 列表创建”

如果循环的目的是 “生成一个新列表”,可以用列表推导式替代传统的for循环,代码更简洁,执行效率也更高。

基础语法

      
      
      
新列表 = [表达式 for 变量 in 可迭代对象 if 条件]

等价于:

      
      
      
新列表 = []
for 变量 in 可迭代对象:
if 条件:
新列表.append(表达式)

实战案例

# 案例1:生成1到10的平方列表(传统循环vs列表推导式)# 传统循环squares = []for i in range(111):squares.append(i**2)# 列表推导式(一行搞定)squares = [i**2 for i in range(1, 11)]print(squares)  # 输出:[1,4,9,...,100]# 案例2:筛选列表中的偶数(加条件)nums = [1,2,3,4,5,6,7,8]even_nums = [num for num in nums if num % 2 == 0]print(even_nums)  # 输出:[2,4,6,8]# 案例3:嵌套循环(生成所有组合)a = [1,2]b = ["x","y"]combinations = [f"{x}_{y}" for x in a for y in b]print(combinations)  # 输出:["1_x""1_y""2_x""2_y"]

(三)循环中的 else 语句:“正常结束循环时执行”

Python 的循环(for/while)都支持搭配else语句 ——当循环 “正常结束”(没有被break终止)时,会执行else里的代码

案例:检查列表中是否有 “负数”,没有则打印提示:

      
      
      
nums = [1,3,5,7]for num in nums:if num < 0:print("列表中存在负数")breakelse:# 只有当循环没被break终止时,才会执行print("列表中没有负数")  # 输出:列表中没有负数

五、常见坑点与避坑指南

1.死循环:最常见的错误!

原因:while循环中没有更新条件变量(比如i一直不变),或条件永远为 True(比如while 1:)。

解决:每次写while循环时,先检查 “是否有更新条件的代码”;测试时如果卡住,按Ctrl+C强制终止。

2.缩进错误:Python 的缩进是语法的一部分!

原因:循环体没有缩进,或缩进不一致(有的用 4 空格,有的用 Tab)。

解决:统一用 4 个空格缩进;IDE(如 PyCharm、VS Code)会自动帮你对齐,避免手动调整。

3.遍历字典时修改字典:直接在遍历中删除 / 添加键值对会报错!

原因:字典在遍历过程中不能修改 “大小”(即不能增删键)。

解决:先遍历字典的 “副本”(比如for key in list(student.keys()):),再修改原字典。

4.range () 的 “左闭右开” 特性:容易误解范围!

比如range(1,5)生成的是 1,2,3,4(不含 5),不是 1-5。

解决:记住 “end 参数要比目标值大 1”,比如要到 5,就写range(1,6)。

六、总结:该用 for 还是 while?

很多场景下,for和while可以互相替代,但选择合适的循环能让代码更易读:

image.png


最后,记住一句话:循环的本质是 “减少重复代码”。写循环时,先想清楚 “要重复做什么”“什么时候停止”,再选择合适的循环结构 —— 多练几个案例(比如批量处理文件、统计数据),很快就能熟练掌握!

如果觉得这篇文章有用,欢迎点赞、在看,分享给身边学 Python 的朋友~ 有任何疑问,也可以在评论区留言交流哦!


【声明】内容源于网络
0
0
码途钥匙
欢迎来到 Python 学习乐园!这里充满活力,分享前沿实用知识技术。新手或开发者,都能找到价值。一起在这个平台,以 Python 为引,开启成长之旅,探索代码世界,共同进步。携手 Python,共赴精彩未来,快来加入我们吧!
内容 992
粉丝 0
码途钥匙 欢迎来到 Python 学习乐园!这里充满活力,分享前沿实用知识技术。新手或开发者,都能找到价值。一起在这个平台,以 Python 为引,开启成长之旅,探索代码世界,共同进步。携手 Python,共赴精彩未来,快来加入我们吧!
总阅读181
粉丝0
内容992