第4章 分支和循环:让程序学会判断和重复

各位同学,欢迎来到第4章。前面我们学了变量、数据类型,程序已经能存储信息了。但说实话,那还只是个「静态记事本」。真正的程序,得能做决定,能反复干活。这一章,我们就来搞定这两件事。

4.1 布尔类型与比较运算符

在讲判断之前,先认识一个老朋友——布尔类型。它只有两个值:True 和 False。说白了,就是「是」与「否」。

布尔值怎么来?最常见的方式是通过比较运算符:

运算符含义示例结果
==等于5 == 5True
!=不等于5 != 3True
>大于7 > 3True
<小于2 < 1False
>=大于等于5 >= 5True
<=小于等于4 <= 3False
小提示:一个等号 = 是赋值,两个等号 == 才是判断相等。我见过太多新手在这翻车了,包括当年的我。

4.2 if 判断语句

有了布尔值,我们就可以让程序「做选择」了。最简单的形式就是 if 语句:

age = 18
if age >= 18:
    print("你已经成年了,可以考驾照了")

注意看,if 后面跟一个条件表达式,冒号结尾,下一行缩进4个空格。这个缩进就是 Python 的「代码块」标志。我个人习惯用4个空格,别用Tab混着用,会出大问题。

核心要点:Python 用缩进来划分代码块,这是它和其他语言最大的不同。缩进错了,程序就错了。

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 FalseFalse
or或(一个真就真)True or FalseTrue
not非(取反)not TrueFalse
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	
...
注意:嵌套层数不要太深,超过3层代码就很难读了。我见过有人写了5层嵌套,维护的时候自己都看不懂。如果确实需要多层,考虑拆成函数。

4.10 知识结构图

分支与循环 条件判断 循环控制 if 语句 if-else if-elif-else while 循环 for 循环 break/continue 逻辑运算符:and / or / not 比较运算符:== != > < >= <=

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 组合条件

好了,这一章的内容就到这里。说实话,分支和循环是编程的「骨架」,几乎所有程序都离不开它们。下一章我们会学习函数,把代码组织得更优雅。到时候见!