Python中的循环结构:从入门到精通

掌握循环,让代码高效重复执行

前言

大家好!今天我们来聊聊Python编程中的一个核心概念——循环结构。还记得我第一次接触循环的时候,脑子里冒出的第一个念头是:“终于不用写100遍print了!”如果你也有过这样的想法,那这篇文章正是为你准备的。

一、什么是循环?为什么需要它?

生活中的循环

想象一下这些场景:

  • 食堂阿姨:接过餐盘 → 询问菜品 → 打菜 → 递回餐盘,重复直到所有学生都打完饭

  • 快递小哥:查看地址 → 赶往目的地 → 联系收件人 → 签收,重复直到所有快递送完

  • 你的闹钟:每天早晨准时响起...(虽然你可能不想承认这个循环)

这些场景的共同点是:有条件地重复做同一类事情。程序解决实际问题,自然也需要这种能力——这就是循环。

循环的作用

举个简单的例子:女朋友生气了,要求你说100遍“老婆大人,我错了”。作为程序员,你会怎么写?

# 傻瓜式写法(谁这么写谁傻)
print("老婆大人,我错了")
print("老婆大人,我错了")
# ... 重复100次 ...

聪明一点的做法:

# 循环的优雅写法
for i in range(100):
    print("老婆大人,我错了")

循环的核心作用:让代码高效地重复执行。

while 还是 for?选择指南

场景推荐循环原因
循环次数已知while条件控制更直观
循环次数未知for遍历序列更方便
遍历列表/字符串for语法简洁,自动处理索引
需要无限循环while True配合break灵活退出

我的小建议:初学时两种都要掌握,但实际开发中for循环的使用频率会更高,因为它更“Pythonic”。


二、while循环:条件驱动型选手

基本语法(三步走)

# ① 初始化计数器
i = 0

# ② 编写循环条件
while i < 100:
    # 循环体
    print("老婆大人,我错了")
    
    # ③ 更新计数器
    i += 1

💡 小知识:计算机世界里的计数器大多从0开始,这是C语言留下的传统,也是很多程序员“从0数数”习惯的由来。

执行流程图解

text

开始 → 初始化计数器 → 判断条件 → [条件成立] → 执行循环体 → 更新计数器 → 回到判断
                          ↓
                    [条件不成立]
                          ↓
                        结束

实战案例:累加求和

# 计算1到100的和
i = 1
result = 0

while i <= 100:
    result += i  # 等价于 result = result + i
    i += 1

print(f"1~100累加后的结果:{result}")  # 5050

一步步理解

  • 第1次:i=1, result=0 → result=0+1=1

  • 第2次:i=2, result=1 → result=1+2=3

  • 第3次:i=3, result=3 → result=3+3=6

  • ... 直到 i=101 时条件不满足,循环结束

常见陷阱:死循环

# ❌ 错误示例:忘记更新计数器
i = 0
while i < 100:
    print("这行会打印到天荒地老")  # i永远是0,条件永远成立
    # 缺少 i += 1

# ✅ 正确写法
i = 0
while i < 100:
    print("只打印100次")
    i += 1

三、break 和 continue:循环中的两大“控制开关”

这两个关键词就像循环里的“紧急按钮”和“跳过键”。

生活类比

想象你在吃5个苹果:

场景对应关键词效果
吃完第3个就饱了break终止循环,不再吃第4、5个
第3个苹果里有虫子continue跳过这个,继续吃第4个

break:终止整个循环

i = 1
while i <= 5:
    if i == 4:
        print("吃饱了,不吃了!")
        break
    print(f"正在吃第{i}个苹果")
    i += 1

# 输出:
# 正在吃第1个苹果
# 正在吃第2个苹果
# 正在吃第3个苹果
# 吃饱了,不吃了!

continue:跳过本次,继续下一次

i = 0
while i < 5:
    i += 1
    if i == 3:
        print("这个苹果有虫子,换一个")
        continue
    print(f"正在吃第{i}个苹果")

# 输出:
# 正在吃第1个苹果
# 正在吃第2个苹果
# 这个苹果有虫子,换一个
# 正在吃第4个苹果
# 正在吃第5个苹果

⚠️ 警告:使用continue时务必注意计数器更新的位置!如果放在continue后面,会导致计数器不更新,从而产生死循环。

猜数字游戏(完整版)

import random

secret = random.randint(1, 10)
chances = 3
i = 0

while i < chances:
    guess = int(input(f"猜猜数字(1-10),还剩{chances - i}次机会:"))
    
    if guess == secret:
        print("🎉 恭喜你,猜对了!")
        break
    elif guess > secret:
        print("📈 猜大了")
    else:
        print("📉 猜小了")
    
    i += 1
else:
    # while循环也可以配合else使用
    print(f"😭 游戏结束,正确答案是:{secret}")

四、for循环:遍历型选手

如果说while是“条件驱动”,那for就是“序列驱动”。for循环天生就是为遍历设计的。

基本语法

# 遍历字符串
str1 = 'python'
for char in str1:
    print(char)

# 输出:
# p
# y
# t
# h
# o
# n

神奇之处:你不需要手动管理计数器,不需要关心序列长度,for循环会自动处理一切!

range():生成数字序列的神器

range()for循环的最佳拍档:

# 三种用法
range(5)      # 0, 1, 2, 3, 4(从0开始,不包括5)
range(2, 8)   # 2, 3, 4, 5, 6, 7(从2开始,不包括8)
range(1, 10, 2)  # 1, 3, 5, 7, 9(步长为2)

# 口诀:只顾头,不顾尾,步长默认为1

实战:使用for循环求和

# 1到100的和(一行代码?也不是不行)
result = 0
for i in range(1, 101):
    result += i
print(f"1~100的和:{result}")

# 偶数和
result = 0
for i in range(2, 101, 2):  # 直接从2开始,步长为2,更优雅!
    result += i
print(f"1~100的偶数和:{result}")

用户登录案例(3次机会)

for attempt in range(3):
    username = input("账号:")
    password = input("密码:")
    
    if username == 'admin' and password == 'admin888':
        print("✅ 登录成功")
        break
    else:
        print(f"❌ 登录失败,还剩{2 - attempt}次机会")
else:
    print("🔒 登录失败,账号已被锁定")

五、for...else:一个被低估的特性

很多人不知道Python的循环还能配合else使用。这个特性在其他语言中很少见,但用好了非常优雅。

核心规则

  • 循环正常结束(没有遇到break)→ 执行else中的代码

  • 循环被break终止 → 跳过else

实战:查找质数

num = int(input("请输入一个正整数:"))

if num < 2:
    print("不是质数")
else:
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            print(f"{num}不是质数,它能被{i}整除")
            break
    else:
        print(f"{num}是质数!")

这个写法的妙处:不需要额外设置一个found标志变量,代码更简洁!

查找字符示例

text = input("请输入字符串:")
search_char = 'a'

for ch in text:
    if ch == search_char:
        print(f"找到了'{search_char}'")
        break
else:
    print(f"未找到'{search_char}'")

总结

知识点要点注意事项
while循环条件满足时重复执行别忘了更新计数器
for循环遍历序列配合range()使用
break终止整个循环常用于提前退出
continue跳过本次循环注意计数器位置
for...else循环正常结束后执行break会跳过else

选循环的小技巧

text

需要遍历列表/字符串/范围? → for循环
不知道循环多少次? → while循环
需要无限循环等待某个条件? → while True + break

希望这篇文章能帮助你彻底掌握Python中的循环结构。编程是一门实践的艺术,看完之后一定要动手敲代码!如果有问题,欢迎在评论区交流讨论。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐