⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Python 循环

学习 for 循环和 while 循环 · 难度:入门 · +10XP

Python 循环 — 让计算机不知疲倦地工作

一、什么是循环?为什么它如此重要?

循环(Loop)是让计算机重复执行某段代码的控制结构。如果说变量是编程的基石,函数是复用的单元,那么循环就是效率的引擎。计算机最大的优势就是可以不知疲倦地重复做同一件事,而循环正是利用这一优势的核心工具。

为什么循环重要?没有循环,你只能手动重复代码——处理 100 条数据就要写 100 段代码。有了循环,3 行代码就能处理 100 万条数据。循环让你能:遍历列表中的所有元素、逐个处理文件中的每一行、反复请求直到满足条件、生成各种数列和图案。

Python 提供了两种基本循环:for 循环(遍历可迭代对象)和 while 循环(条件为真时持续执行)。这两种循环配合 breakcontinueelse 子句,能应对几乎所有的重复执行场景。

二、for 循环 vs while 循环 — 全面对比

比较维度for 循环while 循环
使用场景已知迭代次数或遍历集合未知迭代次数,靠条件判断
语法for item in iterable:while condition:
初始/更新变量自动处理(迭代器)需手动管理
无限循环风险低(自动终止)高(忘记更新条件就会死循环)
典型例子遍历列表、遍历字典、range()游戏主循环、等待用户输入、网络重试
Python 风格更 Pythonic(优先使用)只在 for 不合适时使用

三、break、continue、else — 循环控制关键字

关键字作用示例场景
break立即终止整个循环找到目标元素后停止搜索
continue跳过本次迭代,继续下一次跳过不符合条件的元素
else(循环的)循环正常结束(未 break)时执行搜索失败时执行回退逻辑

四、详细代码示例(逐行注释)

# ======== 1. for 循环基础 ========
# 遍历列表
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for fruit in fruits:                 # fruit 依次取列表中的每个值
    print(f"我喜欢吃{fruit}")        # 每个元素都会打印一次

# 使用 range() — 生成数字序列 for i in range(5): # range(5) → 0, 1, 2, 3, 4(不包含 5) print(i, end=" ") # 输出:0 1 2 3 4

# range 的三种形式 range(5) # 0, 1, 2, 3, 4 — 只给结束值 range(2, 6) # 2, 3, 4, 5 — 开始和结束 range(1, 10, 2) # 1, 3, 5, 7, 9 — 开始、结束、步长

# ======== 2. 遍历字典 ======== user = {"name": "小明", "age": 18, "city": "北京"} for key in user: # 默认遍历键 print(key) for key, value in user.items(): # 同时获取键和值(推荐!) print(f"{key}: {value}")

# ======== 3. enumerate() — 带索引遍历 ======== fruits = ["苹果", "香蕉", "橙子"] for index, fruit in enumerate(fruits): print(f"{index+1}. {fruit}") # 1. 苹果 2. 香蕉 3. 橙子 # enumerate 第二个参数指定起始值 for i, f in enumerate(fruits, start=1): # 索引从 1 开始 print(i, f)

# ======== 4. zip() — 同时遍历多个列表 ======== names = ["小明", "小红", "小刚"] scores = [85, 92, 78] subjects = ["数学", "数学", "数学"] for name, score, subj in zip(names, scores, subjects): print(f"{name} 的{subj}成绩:{score}分")

# ======== 5. while 循环 ======== # 基本 while — 当条件为 True 时持续执行 count = 0 while count < 5: # 条件检查在每次迭代前 print(count, end=" ") count += 1 # 必须更新条件变量!否则死循环 # 输出:0 1 2 3 4

# while True 无限循环(由 break 退出) while True: user_input = input("输入 'quit' 退出:") if user_input == "quit": break # 终止循环 print(f"你输入了:{user_input}")

# ======== 6. break 和 continue ======== # break — 提前终止循环 for i in range(10): if i == 5: break # 到 5 就停止,不再继续 print(i, end=" ") # 输出:0 1 2 3 4

# continue — 跳过当前迭代 for i in range(10): if i % 2 == 0: # i 是偶数 continue # 跳过偶数 print(i, end=" ") # 只打印奇数:1 3 5 7 9

# ======== 7. for...else — Python 特色语法 ======== # else 在循环正常结束(未被 break 中断)时执行 items = [1, 3, 5, 7, 9] target = 4 for item in items: if item == target: print("找到了!") break # 找到后 break else: # 只有 break 没执行才运行这里 print(f"{target} 不在列表中") # 输出:4 不在列表中

# 实用场景:判断质数 n = 17 for i in range(2, int(n**0.5) + 1): if n % i == 0: print(f"{n} 不是质数") break else: print(f"{n} 是质数") # 输出:17 是质数

# ======== 8. 列表推导式(List Comprehension) ======== # Python 风格的"循环",更简洁高效 # 传统写法 squares1 = [] for x in range(10): squares1.append(x**2)

# 列表推导式(一行搞定!) squares2 = [x**2 for x in range(10)]

# 带条件的推导式 evens = [x for x in range(20) if x % 2 == 0] # 偶数列 # 嵌套循环的推导式 pairs = [(x, y) for x in "AB" for y in "12"] # [('A','1'),('A','2'),('B','1'),('B','2')]

# ======== 9. 嵌套循环 ======== # 九九乘法表 for i in range(1, 10): # 外层循环:行 for j in range(1, i + 1): # 内层循环:列 print(f"{j}×{i}={i*j}", end=" ") print() # 换行

# ======== 10. 性能优化:避免重复计算 ======== # 不好:每次循环都计算 len() for i in range(len(items)): if i < len(items): # len() 被调用了 n 次 pass

# 更好:提前计算 n = len(items) for i in range(n): if i < n: pass

# ======== 11. 生成器表达式 — 节省内存 ======== # 列表推导式一次性生成所有数据(占内存) big_list = [x**2 for x in range(10**6)] # 100 万个元素的列表,占内存 # 生成器表达式按需生成(省内存) big_gen = (x**2 for x in range(10**6)) # 只是一个生成器对象 print(sum(big_gen)) # 边计算边求和,内存占用极小

五、Python 循环 vs JavaScript 循环 对比

特性PythonJavaScript
for...of / for...infor x in list:(值)for (x of arr)(值) / for (x in obj)(键)
C 风格 for无(用 range 代替)for (let i=0; i
while
循环 else支持不支持
列表/数组推导式[x for x in arr if x>0]arr.filter(x => x>0)
遍历对象dict.items()Object.entries()

六、实践任务

  1. 使用 for 循环和 range 计算 1 到 100 的所有整数之和
  2. 使用列表推导式生成 1 到 50 中所有能被 3 整除的数的平方
  3. 打印九九乘法表(嵌套循环)
  4. 使用 while 循环实现一个猜数字游戏:系统随机生成 1-100 的数字,用户输入猜测,提示"大了"或"小了",直到猜对
  5. 使用 for...else 结构,在列表中查找一个不存在的元素,观察 else 块的执行
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 152 篇
0 完成
🔥 0