|
|
接下来我们要学的循环结构是让程序「会重复干活」,是Python第二大核心流程控制语法,能解决所有需要重复执行的场景(比如批量处理数据、重复逻辑校验等)。Python中共有两种循环:for循环 和 while循环,我们逐一来拆解。
�� 知识点1:for循环(优先掌握,90%的循环场景都用它)
核心定义
for循环专门用来遍历可迭代对象(目前你接触过的可迭代对象有字符串、range序列,后续学的列表/字典/元组也都是),固定语法是:
- for 临时变量 in 可迭代对象:
- 缩进的循环体代码块
复制代码
必备搭档:range()函数
range()是生成整数序列的内置函数,是for循环最常用的遍历对象,共有三种用法:
| | | range(stop)
| 生成0到stop-1的整数(左闭右开规则)
| range(5) → 0、1、2、3、4
| range(start, stop)
| 生成start到stop-1的整数
| range(2,6) → 2、3、4、5
| range(start, stop, step)
| 按步长step生成序列,step为负时倒序
| range(1,10,2) → 1、3、5、7、9
range(10,0,-1) → 10、9...1
| 可运行示例
- # 示例1:遍历字符串,打印每个字符
- for char in "Python":
- print(char)
- # 输出:P、y、t、h、o、n,每个单独占一行
- # 示例2:计算1到100的累加和
- sum_total = 0
- for i in range(1, 101):
- sum_total += i
- print(f"1到100的累加和是{sum_total}") # 输出5050
- # 示例3:倒序打印10到1的数字
- for i in range(10, 0, -1):
- print(i)
复制代码
⚠️ 常见踩坑
❌ 错误1:搞混range的开闭区间,range(a,b)永远不包含b,比如要打印1到10必须写range(1,11),写range(1,10)只会到9
❌ 错误2:临时变量只在循环内部有效,循环结束后访问会拿到最后一次迭代的值
❌ 错误3:循环过程中修改正在遍历的可迭代对象,会导致逻辑混乱(后续学列表时会重点讲解)
配套小练习11. 计算1到100所有奇数的和
2. 输入一个正整数n,打印n遍「我要学好Python」
3. 输入一个字符串,统计里面字母a出现的次数
�� 知识点2:while循环
核心定义
while循环适合不知道具体循环次数、只要满足条件就一直执行的场景,语法:
- while 循环条件:
- 缩进的循环体代码块
- # 必须有修改循环条件的语句,否则会进入死循环
复制代码
可运行示例- # 示例1:用while循环打印1到10的数字(和for循环效果一致)
- i = 1
- while i <= 10:
- print(i)
- i += 1 # 必须有这行修改i的值,否则i永远是1,程序陷入死循环
- # 示例2:密码校验逻辑,直到用户输入正确密码才停止
- correct_pwd = "123456"
- input_pwd = input("请输入密码:")
- while input_pwd != correct_pwd:
- print("密码错误,请重新输入")
- input_pwd = input("请输入密码:")
- print("登录成功!")
复制代码
for循环与while循环对比 | | | 适用场景
| 已知循环次数、遍历序列/容器
| 未知循环次数,只要满足条件就执行
| 写法复杂度
| 简洁,不需要手动维护计数变量
| 需要手动定义计数变量、手动修改条件
| 使用率
| 日常开发占90%
| 仅特殊场景使用(比如死循环服务、用户交互)
| ⚠️ 常见踩坑
❌ 错误1:忘记写修改循环条件的语句,导致死循环(如果不小心写了死循环,按Ctrl+C终止程序即可)
❌ 错误2:循环条件写错,比如应该是<=,写成了<,导致少执行一次
配套小练习21. 用while循环计算1到100的累加和
2. 不断要求用户输入数字,直到输入的数字是负数为止,最后输出所有输入正数的平均值
�� 知识点3:循环控制关键字(break + continue)
这两个关键字可以灵活控制循环的执行逻辑,核心区别如下:
| | | break
| 直接终止整个循环,后面的所有迭代都不执行
| 找到目标后不需要继续循环的场景(比如搜索到结果就停止)
| continue
| 跳过当前这一次循环,直接进入下一次迭代
| 遇到不需要处理的内容时跳过的场景
| 可运行示例- # 示例1:break用法:遍历1到10,遇到5就终止整个循环
- for i in range(1, 11):
- if i == 5:
- break
- print(i)
- # 输出:1、2、3、4
- # 示例2:continue用法:遍历1到10,遇到5就跳过,不打印
- for i in range(1, 11):
- if i == 5:
- continue
- print(i)
- # 输出:1、2、3、4、6、7、8、9、10
复制代码
额外补充:循环的else子句
for/while循环后面可以跟else代码块,只有当循环正常结束(没有被break终止)时才会执行else里的代码:
- # 示例:搜索字符串里有没有'x',如果没有就输出“没有找到x”
- s = "Python123"
- for char in s:
- if char == 'x':
- print("找到了x")
- break
- else:
- # 循环没有被break触发,说明没找到x
- print("没有找到x")
复制代码 ⚠️ 常见踩坑
❌ 错误1:混淆break和continue,需要终止整个循环时用了continue,导致循环继续执行
❌ 错误2:误以为else是if的else,实际上else是和循环配对的,只有循环正常结束才执行
配套小练习31. 遍历1到20的数字,只打印大于10的数字(用continue实现)
2. 输入一个正整数n,判断它是不是质数(质数:只能被1和它本身整除的大于1的自然数,遍历2到n-1,如果有能整除的就break,否则就是质数)
�� 知识点4:循环嵌套
就是循环里面再套循环,外层循环执行一次,内层循环执行完整的一轮,最经典的案例就是打印九九乘法表:
- # 打印九九乘法表
- for i in range(1, 10): # 外层循环控制行,共9行
- for j in range(1, i+1): # 内层循环控制列,每行有i个式子
- print(f"{j}*{i}={i*j}\t", end='') # end=''表示不换行,\t是制表符对齐
- print('') # 每行结束后换行
复制代码
运行后会输出标准对齐的九九乘法表。
⚠️ 常见踩坑
❌ 错误1:内外层循环的变量名重复,导致逻辑混乱
❌ 错误2:内层循环的范围写错,比如九九乘法表内层循环写range(1,10),会导致每行都打印9个式子
配套小练习41. 用循环嵌套打印一个5行的直角三角形(第一行1个*,第二行2个*,直到第五行5个*)
2. 打印一个正三角形(第一行1个*居中,第二行3个*,直到第五行9个*)
�� 综合巩固练习
把前面学的输入、分支、循环结合起来,写一个完整的猜数字游戏:
要求:
1. 系统固定一个1到100的整数(比如66,后续学random模块后可以改成随机生成)
2. 用户最多有7次猜测机会
3. 每次猜错提示「太大了」或「太小了」
4. 猜对了提示「恭喜你猜对了,总共猜了X次」,如果7次都没猜对提示「游戏结束,正确数字是X」
你可以先尝试写,遇到任何报错或者逻辑问题都可以发给我,写完这个小游戏,循环和分支的知识就完全掌握啦~你是先自己练一下,还是我先给你讲某个知识点的细节?
|
|