for循环
中等0for循环:让计算机帮你自动重复
你有没有试过把一句话重复说10遍?或者从1数到100?如果每件事都要自己动手,会累坏的。在编程中,for循环就是让计算机帮你自动重复做事情的“小助手”。就像坐旋转木马:转一圈算一次,转完指定的圈数就自动停下。for循环能让你轻松地让计算机执行固定次数的任务,或者依次处理一个集合里的每个元素。
1. for循环的基本语法
for循环的写法很简单,就像给变量排队领号码:
for 变量 in 序列:
要重复执行的代码
这里的“序列”可以是一串数字、一个列表、一个字符串等。每次循环,变量会从序列中取出一个值,然后执行缩进的代码块。当所有值都取完了,循环就结束。
举个例子:让计算机从1数到5。
for i in range(1, 6): # 变量i依次取值1,2,3,4,5
print("第", i, "次") # 每次打印当前次数
运行结果:
第 1 次
第 2 次
第 3 次
第 4 次
第 5 次
? 关键点:
for后面的变量名可以自由起,但最好有意义,比如用i表示索引,用fruit表示水果。
2. range()——最常用的数字生成器
range()函数就像一台自动出票机,能生成一串有序的数字。它有三种常用用法:
| 用法 | 说明 | 例子 | 生成序列 |
|---|---|---|---|
range(停止值) | 从0开始,到停止值-1结束 | range(5) | 0,1,2,3,4 |
range(起始, 停止) | 从起始值开始,到停止值-1结束 | range(2, 6) | 2,3,4,5 |
range(起始, 停止, 步长) | 可以跳着取数,步长可以是负数 | range(0, 10, 2) | 0,2,4,6,8 |
生活例子:小明每天存3元零花钱,想算一周存了多少?可以用range模拟每一天。
total = 0 # 总钱数,初始为0
for day in range(1, 8): # day从1到7,代表星期一到星期日
total = total + 3 # 每天存3元
print("一周共存了", total, "元") # 输出:一周共存了 21 元
注意:range(1, 8)生成1,2,3,4,5,6,7(不包含8),对应7天。
用步长跳着数:比如打印1到10之间的奇数。
for odd in range(1, 11, 2): # 步长2,依次得到1,3,5,7,9
print(odd, end=" ") # 输出:1 3 5 7 9
反向数:倒计时10秒。
for second in range(10, 0, -1): # 从10开始,减到1为止
print(second, "秒后发射")
print("? 发射!")
3. 遍历列表和字符串
除了数字,for循环还能直接“翻看”列表里的每样东西,或者“读出”字符串里的每个字符。
遍历列表——吃水果
假设你有一篮水果,想吃一遍,用for循环帮你一个个说出来。
fruits = ["苹果", "香蕉", "橘子"] # 水果列表
for fruit in fruits: # fruit每次取出一个水果
print("我喜欢吃", fruit) # 输出:我喜欢吃 苹果 等等
遍历字符串——拼出姓名
字符串是由一个个字符组成的序列,for可以逐个访问。
name = "小明" # 姓名
for ch in name: # ch依次是'小'和'明'
print("字母:", ch) # 输出:字母:小 字母:明
结合range和列表索引
如果想同时知道元素的位置和内容,可以借助range和索引。
scores = [85, 92, 78, 90] # 四名学生的分数
for index in range(len(scores)): # index从0到3
print("第", index+1, "位同学得分:", scores[index])
4. 循环中的控制:break和continue
有时循环过程中需要提前结束或跳过某一次。break就像喊“停”,continue就像“跳过这一次,继续下一次”。
break——找到目标就停
比如在游戏中寻找宝物,只要找到了就停止搜索。
chests = ["木箱", "金箱", "空箱", "宝箱"] # 宝箱列表
for chest in chests:
if chest == "宝箱": # 如果遇到宝箱
print("发现宝箱!")
break # 立刻停止循环
print("继续找...") # 只有不是宝箱时才打印
# 输出:继续找... 继续找... 继续找... 发现宝箱!
continue——跳过不需要的项
比如统计考试成绩,只计算及格(≥60)的分数。
scores = [45, 82, 67, 53, 91] # 考试分数
total = 0
count = 0
for score in scores:
if score < 60: # 不及格就不算
continue # 跳到下一次循环
total = total + score
count = count + 1
print("及格平均分:", total / count) # 输出:及格平均分:80.0
5. 嵌套循环——循环里面套循环
有时一个循环不够用,比如打印乘法表:外层循环控制行,内层循环控制列。
for i in range(1, 10): # i: 1~9
for j in range(1, i+1): # j: 1~i
print(i, "*", j, "=", i*j, end="\t") # 制表符对齐
print() # 每行结束后换行
运行结果(部分):
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9
...
生活例子:小明每天有3顿饭,每顿吃2个包子,用嵌套循环算出3天一共吃多少包子。
total = 0
for day in range(1, 4): # 3天
for meal in range(1, 4): # 每天3顿饭
total = total + 2 # 每顿2个包子
print("3天一共吃了", total, "个包子") # 输出:18
6. 新手最容易犯的错误
❌ 忘记写冒号
for i in range(5) # 少了冒号,语法错误
print(i)
改正:在for语句末尾加英文冒号:。
❌ 缩进错误
for i in range(3):
print(i) # 没有缩进,属于循环外,只执行一次
改正:循环体必须缩进(通常4个空格或一个Tab),Python靠缩进区分代码块。
❌ range边界搞反
想打印1到10,却写了range(1,10)——这样只到9,因为结束值不包含。
改正:要包含10,必须写range(1, 11)。
❌ 循环内修改正在遍历的列表
items = ["a", "b", "c"]
for item in items:
items.remove(item) # 一边遍历一边删除,会跳过元素
建议:遍历列表的副本items[:],或者用列表推导式。
❌ 忘记变量名含义导致逻辑错误
for i in range(100):
print(i) # 想输出1~100,但i从0开始,少了一个数
改正:明确起始值,比如range(1, 101)。
7. 完整可运行示例:计算班级平均分
下面是一个完整的程序,输入5位同学的成绩,用for循环计算平均分。
# 程序:计算班级平均分
scores = [] # 空列表,用于存放成绩
total_students = 5 # 学生人数
for student in range(1, total_students + 1): # student 从1到5
score = int(input("请输入第" + str(student) + "位同学的分数:"))
scores.append(score) # 把分数添加到列表
# 计算总分
sum_score = 0
for s in scores: # 遍历每个分数
sum_score = sum_score + s
average = sum_score / total_students
print("班级平均分是:", average)
运行示例:
请输入第1位同学的分数:88
请输入第2位同学的分数:95
请输入第3位同学的分数:72
请输入第4位同学的分数:84
请输入第5位同学的分数:91
班级平均分是:86.0
8. 相关知识点指引
while循环:当不知道具体循环次数时,while更灵活,例如“直到用户输入正确为止”。- 列表推导式:一种简洁的
for循环写法,比如[x**2 for x in range(5)]能快速生成平方列表。 enumerate()函数:同时获取索引和元素,for i, fruit in enumerate(fruits):。zip()函数:同时遍历多个列表,例如for name, score in zip(names, scores):。- 循环中的
else:当循环正常结束(没遇到break)时执行else块,可用于判断是否找到了目标。
掌握for循环,你就拥有了让计算机自动重复工作的“遥控器”。多写几个例子,比如打印日历、模拟抽奖、计算累加和,很快就能熟练运用了!
例题精讲
在Python中,执行以下代码后,循环体共执行多少次? for i in range(5): print(i)
以下代码的输出结果是? for i in range(1, 10, 2): print(i, end=' ')
执行以下代码后,变量i的值是2。 for i in range(3): pass print(i)
以下代码的功能是计算1到100(含)所有整数的和,请填写空白处。
total = 0
for i in range(1, 101):
___以下代码希望输出5次"Hello",请填写空白处。
for i in range(5):
___