16 Python for循环
前言
在日常生活中,我们经常遇到需要“挨个处理”的事情。比如:点名时挨个叫学生的名字、逛超市时把购物车里的商品挨个扫码结账。
在Python中,处理这种“挨个遍历”的任务,for 循环是绝对的王者!它的核心思想是:“把队伍里的每一个元素都请出来,挨个处理一遍”。
for 循环的基本语法与核心概念
for 循环的蓝图长这样:
for 临时变量 in 可迭代对象(比如列表、字符串):
# 缩进的代码块
# 每次拿出一个元素,就会执行一次这里的代码新手必读: 这里的 临时变量 是你自己起的名字(叫 i、item、fruit 都可以)。你可以把它想象成一个“抓手”,它每次会从集合里抓取一个东西出来,用完就去抓下一个。
🍎 基础示例 1:遍历列表(点名册)
假设你有一个水果筐(列表),我们用 for 循环把里面的水果挨个拿出来吃掉:
fruits =["苹果", "香蕉", "葡萄", "西瓜"]
# fruit 就是那个“临时变量”,每次代表列表里的一个水果
for fruit in fruits:
print(f"我正在吃:{fruit} 🍉")
print("水果全吃光啦!")(看!不需要像 while 循环那样自己维护一个 count += 1,for 循环会自动帮你往后走!)
🔠 基础示例 2:遍历字符串(拆字游戏)
字符串就像是一个装着许多字符的盒子,for 循环也可以把它们挨个拆开:
for letter in "Python":
print(f"当前字母是: {letter}")for 循环的最佳拍档:range() 函数
如果我们不想遍历列表,只是单纯想“重复执行某段代码N次”,或者想“从 1 数到 100”,就需要请出 for 循环的黄金搭档:range() 函数。它就像是一个流水线机器,专门负责生产连续的数字。
range(5):重复 5 次(生成 0, 1, 2, 3, 4)range(1, 6):从 1 数到 5(顾头不顾尾,包含起点1,不包含终点6)range(1, 10, 2):跳着数(生成 1 到 10 之间的所有奇数:1, 3, 5, 7, 9)
# 打印 3 次“你好”
for i in range(3):
print("你好,Python!")如果我需要“序号(Index)”怎么办?
很多学过 C++ 或 Java 的朋友会发现,Python 的 for item in list: 是直接把“值”拿出来,没有自带序号。但在实际开发中,我们非常频繁地需要知道当前元素排在第几个。
别担心,Python 为你准备了两种完美的解决方案:
🌟 方案一:最优雅、最地道的做法 —— enumerate() 函数(强烈推荐)
enumerate 的英文意思是“枚举”。你可以把它想象成一个“贴标签机”,它会在你遍历列表的同时,自动给每一个元素贴上递增的序号。
heroes =["钢铁侠", "蜘蛛侠", "蝙蝠侠"]
# index 接收序号,hero 接收具体的英雄名字
for index, hero in enumerate(heroes):
print(f"编号 {index} 的英雄是:{hero}")
# --- 输出结果 ---
# 编号 0 的英雄是:钢铁侠
# 编号 1 的英雄是:蜘蛛侠
# 编号 2 的英雄是:蝙蝠侠💡 神奇的小技巧: 如果你是做界面展示,希望序号从 1 开始给普通用户看,可以直接加上 start=1:
for index, hero in enumerate(heroes, start=1):
print(f"第 {index} 名:{hero}")
# 输出:第 1 名:钢铁侠 ...🛠️ 方案二:修改原数据时的做法 —— 结合 range(len())
思路是:先用 len() 获取列表有多长,再用刚刚学过的 range() 生成一串序号,最后通过序号去列表里拿东西。
当你必须要通过序号去“修改”原列表里的数据时,这种写法最合适:
scores = [80, 90, 85]
# len(scores) 是 3,range(3) 会生成 0, 1, 2
for i in range(len(scores)):
# i 是序号,我们通过 scores[i] 拿到具体的分数并直接修改它
scores[i] = scores[i] + 5
print("加分后的成绩单:", scores)
# 输出:加分后的成绩单: [85, 95, 90]四、 实战案例
学了理论,我们来看看 for 循环在真实写代码时能帮我们解决什么问题。
🛒 案例一:购物车自动结账(累加求和)
cart_prices =[12.5, 30.0, 9.9, 50.5, 8.0]
total_money = 0 # 准备一个空钱包来装总金额
for price in cart_prices:
total_money += price # 挨个加到钱包里
print(f"💳 您好,您一共消费了:{total_money} 元。")🚦 案例二:带 VIP 识别的批量问候(结合 break 和 continue)
for 循环里同样可以使用 break(提前彻底终止)和 continue(跳过本次,继续下一次)。
users =["张三", "李四", "王五", "黑客", "赵六"]
for user in users:
if user == "黑客":
print("🚨 警告:发现黑客!停止后面的所有问候!")
break # 遇到黑客,直接关闭整个循环
if user == "王五":
print("👑 尊贵的VIP王五,您好!")
continue # 单独问候完王五,跳过下面的普通问候,直接去接待下一个人
print(f"普通用户 {user},欢迎登录!")终极对比:for 还是 while?
很多新手会迷茫:什么时候用 for,什么时候用 while?记住这个简单的口诀:
- 知道次数 / 有现成的东西(列表/字符串)去遍历 ➡️ 用
for循环。
(例如:遍历 100 个文件、打印 10 次、计算列表里数字的和) - 不知道次数,只看某个“条件”是否满足 ➡️ 用
while循环。
(例如:玩游戏直到玩家输掉、让用户一直输入密码直到输对为止)
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据