Python 流程控制
让程序学会"做选择"和"跑圈"
Python 学习笔记 · 第二篇
上篇我们搞定了基础语法,这篇来点更实用的——怎么让程序根据条件走不同的路,怎么让程序重复干活不喊累。说白了,就是条件判断和循环,这俩是写代码最常用的东西。学会了它们,你的程序才算真正"活"起来。
先别急着写代码,咱们用生活场景理解一下。想象你早上出门,要看天气决定带不带伞:
这个"如果...否则"的逻辑,就是条件判断。程序会根据某个条件是否为真,来决定接下来执行哪段代码。
Python 里用 if 开头,elif(else if 的缩写)处理多个条件,else 收尾当"兜底"。来看个实际例子——根据考试分数判断等级:
score=85# 假设考试成绩是85分ifscore>=90:print('优秀!继续保持')elifscore>=80:print('良好!再接再厉')elifscore>=60:print('及格!需要加油')else:print('不及格...好好复习吧')# 运行结果:良好!再接再厉
💡 小贴士
elif 可以写多个,根据实际需求添加;else 只能放最后当"兜底",前面所有条件都不满足时才会执行。另外,别忘了每个条件后面加冒号(:),新手经常忘!
⚠️ 踩坑经验
判断相等用 == 不是 = != 是赋值,== 是比较。这个 bug 我当年找了一下午才反应过来,血泪教训!
📌 实战:天气出行方案
# 根据天气决定出行方式weather='rainy'ifweather=='sunny':print('天气不错,骑自行车出门')elifweather=='rainy':print('下雨了,开车或者打车吧')elifweather=='snowy':print('下雪了,公共交通更安全')else:print('天气情况未知,保险起见带把伞')
程序最擅长的就是"重复劳动"——让它干一百遍、一千遍都不会喊累。Python 里有两种循环方式:for 和 while,各有各的用武之地。
for 循环就像排队买票,挨个处理每一个元素。适合"我知道要处理多少个东西"的场景。
fruits=['苹果', '香蕉', '橘子', '葡萄']forfruitinfruits:print(f'我喜欢吃{fruit}')# 运行结果:# 我喜欢吃苹果# 我喜欢吃香蕉# 我喜欢吃橘子# 我喜欢吃葡萄
💡 实用技巧
range() 是 for 循环的好搭档!range(5) 生成 0-4,共5个数字(不包含5)。新手最容易搞混的地方!
# 计算1+2+3+...+100的累加和total=0for i inrange(1, 101): # 包含1,不包含101total+= iprint(f'1到100的累加和是: {total}')# 运行结果:1到100的累加和是: 5050
💡 经验分享
遍历字典的时候,用 .items() 可以同时拿到键和值,比单独遍历键或值方便多了!
# 遍历字典同时获取键和值student={'name': '小明', 'age': 18, 'score': 92}forkey, valueinstudent.items():print(f'{key}: {value}')
while 循环就像"跑到累为止"——只要条件满足,就一直跑下去。适合"不知道要跑多少圈,但知道什么时候停"的场景。
import randomanswer=random.randint(1, 10)# 系统随机出一个1-10的数guess=0print('猜猜数字是几(1-10)?')whileguess!=answer: # 猜不对就一直猜guess=int(input('请输入: '))ifguess<answer:print('太小了,减少一点')print('太大了,继续猜')print('恭喜你,猜对了!')
# 倒计时10秒发射火箭countdown=10whilecountdown>0:print(f'倒计时: {countdown}秒')countdown-=1# 每次减1,别忘了!print('发射!🚀')
⚠️ 郑重警告
while 最容易写出死循环!一定要确保条件最终会变成 False,不然程序跑到天荒地老都不停。写完 while 循环后,脑子里过一遍:初始状态→循环体→条件变化,确认不会无限循环!
有时候循环到一半,发现"够了不需要再跑了",怎么办?break 就是"紧急刹车"——一按下去,整个循环直接结束。
shopping_list=['面包', '牛奶', '鸡蛋', '苹果', '矿泉水']target='牛奶'print(f'要买的东西: {target}')print('开始采购...')foriteminshopping_list:print(f'检查: {item}')ifitem==target:print(f'找到了!买{item}')break# 找到就停,不用再看后面的了print('采购完成')# 运行结果:# 要买的东西: 牛奶# 开始采购...# 检查: 面包# 检查: 牛奶# 找到了!买牛奶# 采购完成
💡 解读
break 一出,整个循环直接结束,后面的元素(鸡蛋、苹果、矿泉水)看都不看了。就像逛超市,找到目标直接结账走人,不会再逛。
correct_password='python123'max_attempts=3forattemptinrange(max_attempts):password=input('请输入密码: ')ifpassword==correct_password:print('登录成功!')breakelse:print(f'密码错误,剩余{max_attempts-attempt-1}次机会')print('程序结束')
跟 break 不同,continue 是"这次不算,直接下一轮"——跳过当前这次循环,继续执行后面的迭代。
print('1到10之间的奇数:')fornuminrange(1, 11):ifnum%2==0: # 如果是偶数continue# 跳过本次循环,不打印print(num)# 运行结果:# 1到10之间的奇数:# 1# 3# 5# 7# 9
# 筛选年龄在25-35岁之间的员工employees=[22, 28, 35, 41, 25, 33, 19, 38]qualified=[]forageinemployees:ifage<25orage>35:continue# 不符合条件,跳过qualified.append(age)print(f'符合年龄要求的员工: {qualified}')# 运行结果:符合年龄要求的员工: [28, 35, 25, 33, 38]
💡 对比记忆
break 是"直接走人,整个循环结束";continue 是"这轮跳过,继续干下一轮"。别搞混了!
占位符 pass——先占个坑
The Placeholder
pass 的中文意思是"通过",在代码里就是"这里什么都不做,但语法上需要一个占位"。就像"占座"一样——先挖个坑,以后再填。
Python 对缩进要求很严格。如果你写了 if 或 def,后面必须跟代码块,不能空着。但有时候你就是"还没想好这块要写什么",这时候 pass 就派上用场了。
# 定义一个待完善的函数deftodo_function():pass# 暂时什么都不做,后面再补充# 有了pass,代码不会报错;没有pass会报缩进错误print('程序正常运行')
classAnimal:defspeak(self):pass# 子类会重写这个方法classDog(Animal):defspeak(self):return'汪汪汪'dog=Dog()print(dog.speak())# 输出: 汪汪汪
score=75ifscore>=90:grade='A'elifscore>=80:grade='B'elifscore>=70:pass# 70-79分的情况还没想好怎么定else:grade='D'
💡 实用技巧
写代码先搭框架再填细节的时候,pass 特别好用。不用先写个 print('TODO') 那么丑,pass 干净利落。
⚠️ 重要区分
pass 不是注释!注释是给人看的,Python 会完全忽略它;而 pass 是给解释器看的——程序会"执行"到这里,然后"通过"(什么都不做),继续往下走。
🎉 今天的内容就到这里!
咱们来捋一下学了什么:
- 条件判断
- for 循环
- while 循环
- break
- continue
- pass
条件判断和循环是编程的灵魂,基本上你写的每段代码都会用到。多练几遍,手感就来了。下一篇我们聊聊函数,教你把代码装进"盒子"里复用,记得关注!
Python 学习笔记系列
第 2 篇 · 流程控制入门