4、分支和循环:if判断语句、运算符、if-else语句、while循环、for循环、break、continue
好,咱们今天聊聊流程控制。说白了,就是让代码学会「动脑子」和「重复干活」。
我刚开始写代码那会儿,觉得程序就是从上往下跑一遍。后来发现,真正的业务逻辑哪能这么简单?你得判断用户有没有登录,得循环处理一万条数据,还得在特定条件下提前跳出。嗯,今天这一章,就是帮你把这些基本功打扎实。
4.1 运算符:判断的基础
在讲 if 之前,咱们先聊聊运算符。因为判断的本质,就是「比较」和「运算」。
4.1.1 比较运算符
说白了就是比大小、比相等。我见过不少新手把 = 和 == 搞混,这坑我当年也踩过。
| 运算符 | 含义 | 示例 |
|---|---|---|
| == | 等于 | 5 == 5 → True |
| != | 不等于 | 5 != 3 → True |
| > | 大于 | 7 > 3 → True |
| < | 小于 | 2 < 8 → True |
| >= | 大于等于 | 5 >= 5 → True |
| <= | 小于等于 | 4 <= 6 → True |
4.1.2 逻辑运算符
有时候一个条件不够,得组合判断。这时候就需要 and、or、not 登场了。
- and:两边都真才真。比如「用户已登录 and 用户是管理员」
- or:一边真就真。比如「今天是周末 or 今天是假期」
- not:取反。比如「not 已过期」
我个人习惯:写复杂条件时,多用括号明确优先级。别指望别人能看懂你的「运算符优先级心算」。
4.2 if 判断语句:让代码学会选择
if 语句,说白了就是「如果……就……」。这是程序最基础的决策能力。
4.2.1 基本 if 语句
age = 18
if age >= 18:
print("你已经成年了")
注意那个冒号,还有缩进。Python 靠缩进区分代码块,这跟其他语言用花括号不一样。我刚开始从 Java 转 Python 时,老忘缩进,报错报得我怀疑人生。
4.2.2 if-else 语句
有「如果」,就得有「否则」。不然条件不满足时程序就傻眼了。
score = 75
if score >= 60:
print("及格了,不错")
else:
print("不及格,得加把劲")
避坑指南:我曾经在 else 后面加了个条件,写成 else if。Python 里正确的写法是 elif,少写一个字母都不行。
4.2.3 if-elif-else 多分支
现实中的判断往往不止两个分支。比如成绩评级:
score = 85
if score >= 90:
grade = "优秀"
elif score >= 80:
grade = "良好"
elif score >= 70:
grade = "中等"
elif score >= 60:
grade = "及格"
else:
grade = "不及格"
print(f"你的等级是:{grade}")
你想想看,如果没有 elif,你得写多少个嵌套的 if-else?代码会变得又臭又长。
4.3 while 循环:重复到条件不满足为止
while 循环,说白了就是「只要条件成立,就一直干」。适合那种「不知道要循环多少次」的场景。
count = 0
while count < 5:
print(f"第 {count+1} 次循环")
count += 1
警告:千万别忘了在循环体里改变条件变量!不然就成了死循环。我当年写爬虫时,忘了加 count += 1,结果程序跑了一整夜,CPU 飙到 100%。
4.4 for 循环:遍历的利器
for 循环更适合「知道要循环多少次」或者「要遍历一个集合」的场景。
4.4.1 遍历列表
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
4.4.2 配合 range() 使用
想循环指定次数?用 range()。
for i in range(5):
print(f"这是第 {i+1} 次循环")
# range(起始, 结束, 步长)
for i in range(1, 10, 2):
print(i) # 输出:1, 3, 5, 7, 9
我个人习惯:遍历列表时,如果既需要索引又需要元素,用 enumerate():
for index, fruit in enumerate(fruits):
print(f"第{index+1}个水果是{fruit}")
4.5 break 和 continue:循环的控制杆
有时候循环到一半,需要提前结束或者跳过某一次。这时候 break 和 continue 就派上用场了。
4.5.1 break:彻底跳出循环
break 就像紧急刹车。一旦执行,整个循环直接结束。
for i in range(10):
if i == 5:
print("遇到5了,不玩了")
break
print(i)
# 输出:0, 1, 2, 3, 4
为什么会这样?因为 i 等于 5 时,break 直接让循环终止了,后面的 6 到 9 都没机会输出。
4.5.2 continue:跳过本次循环
continue 则温和得多。它只是跳过当前这一次,继续下一次。
for i in range(10):
if i % 2 == 0:
continue # 偶数跳过
print(i)
# 输出:1, 3, 5, 7, 9
避坑指南:我曾经在 while 循环里用 continue,结果忘了更新条件变量,导致死循环。记住:continue 只是跳过本次循环体后面的代码,不会帮你自动更新条件。
4.6 实战小案例:猜数字游戏
把今天学的串起来,写个小游戏:
import random
target = random.randint(1, 100)
guess_count = 0
while True:
guess = int(input("猜一个1到100之间的数字:"))
guess_count += 1
if guess == target:
print(f"恭喜你猜对了!用了{guess_count}次")
break
elif guess > target:
print("猜大了")
else:
print("猜小了")
这个例子用到了 while 循环、if-elif-else、break。你想想看,如果没有 break,这个游戏会怎么样?对,永远停不下来。
4.7 总结
今天咱们聊了:
- 运算符:比较和逻辑运算,判断的基础
- if 系列:if、if-else、if-elif-else,让代码会决策
- while 循环:条件循环,小心死循环
- for 循环:遍历循环,配合 range() 很强大
- break 和 continue:循环的控制杆,一个粗暴一个温柔
嗯,这些就是流程控制的全部基础了。下一章咱们会聊更高级的数据结构,到时候这些循环和判断会频繁出现。先把今天的内容练熟,写几个小项目试试手。
最后说一句:代码是写给人看的,顺便让机器执行。所以,别光顾着让机器跑得快,先让你的代码读起来顺。清晰的逻辑、合理的分支、有意义的变量名——这些比炫技重要得多。