Python 循环的简单应用
困难6用循环解决实际问题——Python循环应用详解
循环是编程里最实用的工具之一。它能让计算机自动完成重复的任务,比如算总成绩、找最高分、猜数字、画图案。学会循环,你就可以让电脑帮自己做数学题、统计全班同学的身高,甚至写一个小游戏。下面我们通过几个常见例子,看看循环到底能做什么。
一、用 for 循环做累加——从 1 加到 100
想象一下你要把 1 到 100 逐个数加起来,手动算很慢,还容易出错。用 for 循环几行代码就能搞定。
total = 0 # 用来存累加的结果,先设为0
for i in range(1, 101): # range(1,101) 生成1,2,3,...,100
total = total + i # 每次把当前的 i 加到 total 上
print("总和是", total) # 输出:5050
原理说明:
循环开始前,total 是 0。第一次循环 i=1,total 变成 0+1=1;第二次 i=2,total 变成 1+2=3……最后 i=100,total 变成之前的总和加 100,得到 5050。
生活中的类比:
就像你有一个存钱罐,开始是空的,每天往里放当天的编号那么多硬币(第1天放1枚,第2天放2枚……第100天放100枚),最后数一数总共有多少枚。循环就是自动帮你“放硬币”的机器人。
常见错误:
- 忘记给
total初始化(写成total但没赋初值),导致运行时出错。 range(1,101)写成了range(1,100),这样只加到 99,输出 4950(少了100)。- 累加语句写成了
total = i,这样只会保留最后一个 i 的值,而不是累加。
小练习:
用循环计算 1 到 50 所有偶数之和。提示:可以用 range(2,51,2)。
二、用 for 循环找最大值——谁是最高分
你有一堆分数,要找出最高分。人工一个一个比很费劲,让循环替你比较。
scores = [85, 92, 78, 95, 88] # 五名同学的分数
max_score = scores[0] # 先假设第一个分数是最大
for score in scores: # 遍历列表里的每个分数
if score > max_score: # 如果当前分数比记录的最大值还大
max_score = score # 就更新最大值
print("最高分是", max_score) # 输出:95
原理说明:
循环开始时,max_score 等于第一个分数 85。然后循环依次取出 92、78、95、88。每次比较:92>85,更新为92;78不大于92,跳过;95>92,更新为95;88不大于95,跳过。最后 max_score 就是 95。
生活中的类比:
就像班里选班长,你先随便指定第一个同学作为“目前最高身高”。然后让所有同学依次站到前面比一比:如果后面的同学更高,就把他作为新的“最高”。最后剩下的就是全班最高的人。
常见错误:
max_score初始化时写成max_score = 0,如果列表里全是负数,就会错误地把 0 当作最大值。- 忘记更新最大值(只
if判断,没写赋值语句)。 - 用
for score in scores时,把score写成了scores(少写 s),导致变量名错误。
扩展应用:
你还可以用相同思路找最小值、求平均值:
scores = [85, 92, 78, 95, 88]
total = 0 # 总和
min_score = scores[0] # 先假设第一个最小
for score in scores:
total = total + score # 累加所有分数
if score < min_score: # 如果当前分数比记录的最小值还小
min_score = score # 更新最小值
average = total / len(scores) # 计算平均分
print("最高分:", max_score) # 注意:这里的 max_score 需要另算,或者合并循环
print("最低分:", min_score)
print("平均分:", average)
注意:最高分和最低分可以在同一个循环里同时算出,但代码要同时保留两个变量。上面只示了最低分和总和,最高分同理。
三、用 while 循环实现猜数字小游戏
电脑心里想一个 1 到 20 之间的数字,你猜,直到猜对为止——这就是 while 循环的典型应用:不知道要循环多少次,直到某个条件成立才结束。
import random # 导入随机模块
secret = random.randint(1, 20) # 电脑随机生成一个1~20的秘密数字
guess = 0 # 先给guess一个不可能是秘密的值,保证能进入循环
while guess != secret: # 只要猜的数字不等于秘密,就继续循环
guess = int(input("猜一个1-20的数字: ")) # 让用户输入并转为整数
if guess < secret: # 如果猜小了
print("太小了")
elif guess > secret: # 如果猜大了
print("太大了")
print("正确!答案是", secret) # 猜对了,退出循环后输出
原理说明:
变量 guess 初始为 0,而 secret 在 1~20 之间,所以 guess != secret 成立,进入循环。每次循环让用户输入新数字,与秘密比较并给出提示。直到某次输入等于秘密,条件 guess != secret 不成立,循环结束。
生活中的类比:
就像和朋友玩“猜数字”游戏:你心里想一个数,朋友们轮流猜,你说“大了”或“小了”,直到猜对为止。while 循环就是那个不断问你、直到你答对的机器人。
常见错误:
- 忘记将
input()的结果转换为整数(int(...)),导致字符串和整数比较,程序报错。 - 初始
guess没有赋值,或者赋的值恰好等于秘密,循环一次也不执行(但概率很小)。 - 条件写反了:
while guess == secret会变成“猜对才继续”,变成死循环。
小改进:可以加上猜的次数统计:
import random
secret = random.randint(1, 20)
guess = 0
tries = 0 # 记录猜的次数
while guess != secret:
guess = int(input("猜一个1-20的数字: "))
tries = tries + 1 # 每猜一次增加1
if guess < secret:
print("太小了")
elif guess > secret:
print("太大了")
print("正确!你猜了", tries, "次。答案是", secret)
四、用循环打印图案——叠出三角形
循环不仅可以算数,还能用来输出有趣的图案。下面用 for 循环打印一个三角形:
for i in range(1, 6): # i 从1到5
print("*" * i) # 重复打印 i 个星号
输出:
*
**
***
****
*****
原理说明:
"*" * i 表示把星号字符串重复 i 次,形成一个字符串。第一次 i=1,打印一个星号;第二次 i=2,打印两个星号……最后 i=5,打印五个星号。每一行都比上一行多一个星号,就像搭积木一层层加高。
生活中的类比:
就像用积木搭一个三角形:第一排放1块,第二排放2块,……第五排放5块,然后从上往下看就是金字塔形状。
常见错误:
- 把
range(1,6)写成range(1,5),会少最后一行。 - 忘记换行:如果用了
print("*" * i, end=""),所有星号会挤在一行。默认print会自动换行,不用修改。 - 想让三角形倒过来:可以改成
for i in range(5, 0, -1),从5到1递减。
进阶图案:打印一个菱形(需要两个循环,一个递增一个递减),但这里先不展开。
五、循环的常见错误和调试技巧
初学者写循环时容易碰到下面几个坑,记住它们能帮你省下很多时间。
-
无限循环:
while 循环的条件永远为 True,没有机会变成 False。比如:x = 1 while x < 10: print(x) # 忘记增加 x,x 永远是1,循环永远不停解决办法:在循环体内修改循环变量,或者加一个
break语句。 -
循环变量没初始化:
比如for i in range(10):没问题,但如果在循环里用total却忘记赋初值,会报 NameError。 -
索引越界(处理列表时):
如果用for i in range(len(scores))再通过下标访问,要小心i的范围是 0 ~ len-1。如果写成scores[i+1]在最后一项会越界。 -
忘记缩进:
Python 靠缩进判断循环体。如果把print写在循环外面,就会只打印最后一次结果。
错误示范:total = 0 for i in range(1,101): total = total + i print(total) # 这行不在循环里,是正确写法。但如果想让每次循环都打印,就要缩进 -
条件写反:
在猜数字时while guess == secret会进入循环吗?不会,因为一开始 guess=0, secret=7,条件不成立,一次都不执行。应该用!=。
六、完整示例:统计全班成绩
把上面学到的累加、最大值、最小值、平均数结合起来,写一个完整程序,处理全班 6 名同学的成绩。
# 全班成绩列表
scores = [88, 92, 76, 95, 84, 90]
total = 0 # 总分初始为0
max_score = scores[0] # 假设第一个是最高分
min_score = scores[0] # 假设第一个是最低分
for score in scores:
total = total + score # 累加总分
if score > max_score: # 找最高分
max_score = score
if score < min_score: # 找最低分
min_score = score
count = len(scores) # 人数
average = total / count # 平均分
print("全班成绩统计")
print("最高分:", max_score)
print("最低分:", min_score)
print("平均分:", round(average, 2)) # 保留两位小数
print("总分:", total)
运行输出:
全班成绩统计
最高分: 95
最低分: 76
平均分: 87.5
总分: 525
这个例子只用了一个循环就完成了三项统计(总分、最高、最低)。你也可以加上统计及格人数(分数≥60)等。
七、生活中的更多应用——循环无处不在
- 自动计算零花钱:如果你每周零花钱增加 5 元,一年后总共得到多少?用循环累加。
- 排队统计:在游乐园记录每个项目的排队人数,用循环找到最长和最短队伍。
- 游戏积分:每关得分不同,用循环累加计算总积分。
- 批量处理文件名:用循环给一堆照片重命名,比如
photo_1.jpg,photo_2.jpg等。
总结:
循环是编程里的“自动重复助手”。遇到需要重复做的事情——不管是算数、比大小、还是输出图案——都可以考虑用 for 或 while 循环。for 循环适合知道次数的情况(比如遍历列表、固定次数的累加),while 循环适合不知道次数、直到条件满足的情况(比如猜数字)。多练习几个例子,你会慢慢发现循环的强大。
下一步学什么?
- 循环嵌套:在循环里再放一个循环,可以打印更复杂的图案(如乘法表、菱形)。
- break 和 continue:提前结束循环或跳过某次循环,让循环更灵活。
- 列表推导式:用一行简洁的代码完成循环生成列表,比如
[x**2 for x in range(10)]。 - while True 循环:无限循环搭配 break 使用,常用于游戏主循环或菜单系统。
掌握了循环,你就拥有了让电脑自动完成大量重复工作的基础能力。继续前进吧!
例题精讲
以下哪个代码片段可以正确计算1到100所有整数的和?
用while循环求1到100的和时,循环条件可以写成 while i <= 100: ,其中i初始值为1,每次循环后i加1。
以下代码用于找出列表nums中的最大值并打印。请补全代码。\nnums = [23, 45, 6, 78, 12, 89]\nmax_num = nums[0]\nfor x in nums:\n if x ___ max_num:\n max_num = x\nprint("最大值是:", max_num)用while循环统计1到50中奇数的个数,下列代码正确的是?
计算n的阶乘(n! = 1×2×3×...×n)。请补全代码。\nn = int(input("请输入一个正整数:"))\nresult = 1\nfor i in range(1, ___):\n result *= i\nprint(n, "的阶乘是:", result)