第4章 分支和循环:让程序学会判断和重复
各位同学,欢迎来到第4章。前面我们学了变量、数据类型,程序已经能存储信息了。但说实话,那还只是个「静态记事本」。真正的程序,得能做决定,能反复干活。这一章,我们就来搞定这两件事。
4.1 布尔类型与比较运算符
在讲判断之前,先认识一个老朋友——布尔类型。它只有两个值:True 和 False。说白了,就是「是」与「否」。
布尔值怎么来?最常见的方式是通过比较运算符:
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
| == | 等于 | 5 == 5 | True |
| != | 不等于 | 5 != 3 | True |
| > | 大于 | 7 > 3 | True |
| < | 小于 | 2 < 1 | False |
| >= | 大于等于 | 5 >= 5 | True |
| <= | 小于等于 | 4 <= 3 | False |
= 是赋值,两个等号 == 才是判断相等。我见过太多新手在这翻车了,包括当年的我。
4.2 if 判断语句
有了布尔值,我们就可以让程序「做选择」了。最简单的形式就是 if 语句:
age = 18
if age >= 18:
print("你已经成年了,可以考驾照了")
注意看,if 后面跟一个条件表达式,冒号结尾,下一行缩进4个空格。这个缩进就是 Python 的「代码块」标志。我个人习惯用4个空格,别用Tab混着用,会出大问题。
4.3 if-else 语句
如果条件成立做一件事,不成立做另一件事,就用 if-else:
score = 85
if score >= 60:
print("恭喜,及格了!")
else:
print("别灰心,下次加油")
你想想看,这就像生活中的「如果...否则...」。我在项目中经常用它做数据校验——如果数据合法就处理,否则就报错。
4.4 if-elif-else 多分支
现实世界往往不止两种情况。比如成绩评级:
score = 88
if score >= 90:
grade = "优秀"
elif score >= 80:
grade = "良好"
elif score >= 70:
grade = "中等"
elif score >= 60:
grade = "及格"
else:
grade = "不及格"
print(f"你的等级是:{grade}")
这里要注意顺序。条件是从上往下依次判断的,一旦命中某个分支,后面的就不再执行了。我曾经在项目中把条件顺序写反了,结果所有数据都进了第一个分支……排查了半天才发现。
4.5 逻辑运算符
有时候一个条件不够用,需要组合多个条件。这时候就需要 and、or、not:
| 运算符 | 含义 | 示例 | 结果 |
|---|---|---|---|
| and | 且(两个都真才真) | True and False | False |
| or | 或(一个真就真) | True or False | True |
| not | 非(取反) | not True | False |
age = 22
has_license = True
if age >= 18 and has_license:
print("你可以开车上路了")
else:
print("你还不能开车")
and 和 or 混在一起用,没加括号,结果逻辑全乱了。记住:优先级 not > and > or,拿不准就加括号。
4.6 while 循环
判断学会了,接下来让程序「反复干活」。while 循环就是「当条件成立时,一直做某件事」:
count = 1
while count <= 5:
print(f"第 {count} 次循环")
count += 1
运行结果:
第 1 次循环
第 2 次循环
第 3 次循环
第 4 次循环
第 5 次循环
这里有个关键点:循环体内一定要有改变条件的语句(比如 count += 1),否则就会变成死循环。嗯,我刚开始学的时候,写死循环是家常便饭,程序卡死了只能强制关闭。
4.7 for 循环
for 循环更适合「遍历」一个序列。比如遍历列表、字符串、范围等:
# 遍历列表
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
# 使用 range()
for i in range(5):
print(f"这是第 {i+1} 次")
range(5) 生成 0 到 4 的整数序列。说白了,for 循环就是「对序列里的每个元素,做一遍同样的事」。
4.8 break 和 continue
循环执行过程中,有时候需要提前结束,或者跳过某一次。这时候就用 break 和 continue:
- break:立即跳出整个循环
- continue:跳过本次循环,进入下一次
# break 示例:找到第一个偶数就停止
for num in [1, 3, 5, 6, 7, 9]:
if num % 2 == 0:
print(f"找到偶数了:{num}")
break
# continue 示例:跳过偶数
for num in range(1, 6):
if num % 2 == 0:
continue
print(f"奇数:{num}")
运行结果:
找到偶数了:6
奇数:1
奇数:3
奇数:5
break 控制爬取页数,用 continue 跳过无效数据。这两个小东西,用好了效率翻倍。
4.9 循环嵌套
循环里面再套循环,就是嵌套。比如打印九九乘法表:
for i in range(1, 10):
for j in range(1, i+1):
print(f"{j}x{i}={i*j}", end="\t")
print()
输出:
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
...
4.10 知识结构图
4.11 综合示例:猜数字游戏
把今天学的知识串起来,写个小游戏:
import random
# 生成1-100的随机数
target = random.randint(1, 100)
guess_count = 0
print("猜数字游戏开始!范围1-100")
while True:
try:
guess = int(input("请输入你猜的数字:"))
guess_count += 1
if guess == target:
print(f"恭喜你!猜对了!一共猜了{guess_count}次")
break
elif guess > target:
print("猜大了,再小一点")
else:
print("猜小了,再大一点")
except ValueError:
print("请输入有效的数字!")
continue
这个例子用到了 while True 无限循环、if-elif-else 判断、break 跳出、continue 跳过错误输入。你看,一个完整的交互程序就这么出来了。
- 布尔类型
True/False是判断的基础 if/elif/else让程序能做决策while和for让程序能重复执行break跳出循环,continue跳过本次- 逻辑运算符
and/or/not组合条件
好了,这一章的内容就到这里。说实话,分支和循环是编程的「骨架」,几乎所有程序都离不开它们。下一章我们会学习函数,把代码组织得更优雅。到时候见!