大家好,我是小吴!欢迎来到从零开始学Python第九期。上一期我们搞定了 while 循环,实现程序持续运行,靠修改循环条件或者输入指定字符就能退出循环,解决了温度转换只能运行一次的问题。但如果我们明确知道要循环多少次,或是需要逐个处理字符串、列表里的每一个内容,用 while 写起来就会比较繁琐。
今天学习的 for 循环,就是专门为遍历而生的“懒人神器”。当你需要处理列表、字符串,或是清楚知道循环次数的时候,for 循环就是非常合适的工具。
一、for 循环是什么?
for 循环的本质是迭代:从头到尾,依次取出「可迭代对象」(列表、字符串、range 生成的序列)里面的每一个元素,拿到一个元素,就执行一轮循环体代码。
基础语法:
执行流程:
1、从可迭代对象取出第一个元素,赋值给循环变量
2、执行缩进内的循环体代码
3、继续取下一个元素,重复上面操作
4、全部元素取完,循环自动结束
💡小提示:for 循环不需要手动编写结束条件,元素遍历完毕就会自动退出,这是它和 while 循环很大的区别。
二、for 循环核心知识点
1. range () 函数—— for 循环黄金搭档
range () 函数用来快速生成整数序列,一共有 3 种常用写法,它和切片一样,遵循顾头不顾尾的规则。
• range(N):生成0 ~ N‑1的整数序列,一共 N 个数字
• range(M, N):生成M ~ N‑1的整数序列,从 M 开始到 N‑1 结束
• range(M, N, K):生成M ~ N‑1、步长为 K 的整数序列。
for i in range(5): print(i)# 输出0 1 2 3 4for i in range(2, 10, 2): print(i)# 输出2 4 6 8
2. 遍历列表和字符串
for循环最擅长的,就是把容器内的元素挨个取出来。处理列表、字符串这类容器时,我们不需要手动通过索引号去访问数据。无论容器里有多少个元素,for循环都会自动完成全部内容的遍历。
#遍历列表print("我喜欢吃:",end="")fruits = ["苹果", "香蕉", "橘子"]for f in fruits: print(f,end=" ")#输出:我喜欢吃:苹果 香蕉 橘子
#遍历字符串for ch in "Python": print(ch) # 依次输出 P y t h o n
3. break 和 continue
和 while 循环规则一样:
• break:直接彻底终止整个循环,后面不再执行
• continue:跳过本轮剩下代码,直接进入下一轮迭代
for i in range(10): if i == 3: continue # i等于3的时候跳过本次,不打印 if i == 7: break # i等于7直接结束全部循环 print(i) # 输出结果:0,1,2,4,5,6
4. for‑else 特殊结构
很多刚学 Python 的小伙伴会以为,else只能和if搭配使用。其实for循环、while循环的后面,同样可以接上else。
这里要重点注意:else里面的代码块,只有循环正常完整跑完,没有被break打断时,才会执行。如果循环被break提前终止,那么else里的代码就不会运行。
for i in range(5): if i == 10: #range(5)最大 i=4,永远不可能等于 10 breakelse: print("循环顺利结束,没有被break打断") #本行会打印,因为代码未触发break
5. 缩进
和 while 循环规则一模一样!只有完成缩进的代码,才属于 for 的循环体。一旦缩进出错,代码运行逻辑就会直接错乱。
三、实战案例:找出 1~100 所有质数
首先我们先来搞清楚什么是质数:大于 1,只能被 1 和自身整除的自然数。换句话讲,一个数字,如果除了数字 1 和它本身之外,找不到其他可以把它整除的数,那它就是质数。如:2、3、5、7、11。
注意两点:
• 1既不是质数,也不是合数。
• 2是唯一的偶质数。
那合数又是什么呢?和质数刚好相反,大于 1,除了 1 和自身以外,还能被别的数字整除的自然数就是合数,比如 4、6、8、9。
项目功能需求:
• 遍历 1‑100 区间内所有自然数,筛选出全部质数;
• 输出所有筛选得到的质数,同时统计并打印质数总数量。
完整代码:
代码逐段讲解
1、prime_count = 0:创建计数器,初始还没有找到质数,计数为 0;
2、外层循环for i in range(2,101):遍历 2~100 的整数序列,1 不是质数,直接跳过;
3、is_prime = True:先做假设,默认当前数字 i 是质数;
4、内层循环for j in range(2,i):拿 2 到 i‑1 的所有数字,对 i 做取余判断;
5、if i % j == 0:如果 i 可以被 j 整除,说明 i 存在除 1 和自身以外的因数,就不是质数;将is_prime赋值为False,并且break跳出内层循环,无需继续判断;
6、判断is_prime == True:假设依旧成立,代表 i 是质数,打印该数字,计数器加 1;
7、全部循环结束,打印统计得到的质数总数量。
模拟代码
👉案例 1:i=4(合数)
i=4 进入外层循环,is_prime = True,先假设 4 是质数。
内层j in range(2,4),j 取值 2、3。
j=2:4%2 ==0条件成立,is_prime=False,执行 break,内层循环直接结束,j=3 不会运行。
is_prime已经是 False,不会打印 4。
👉案例 2:i=5(质数)
i=5,is_prime=True,假设 5 是质数。
内层 j 取值 2、3、4。
5%2、5%3、5%4的余数都不等于 0,if 条件不触发。
内层循环全部跑完,is_prime保持 True,打印数字 5。
👉特殊重点:i=2(最小质数)
range(2,2)是一个空区间,内层 for 循环一次都不会执行,is_prime维持 True,成功打印数字 2。这也是代码可以正确识别 2 为质数的关键。
这一期我们学习了 for 循环,掌握了 range、字符串与列表遍历、break和continue、for‑else 的运用。还完成了 1‑100 质数查找的小案例。
下一期,我们重点对比:到底什么时候用 for 循环,什么时候用 while 循环,分清两者的使用场景。
✍️小思考:我们刚刚实现了查找 1‑100 的所有质数,那如何找出 1‑100 里面全部的合数呢?大家可以动手试一试。
拜拜~👋,我们下期见!