第4章:分支和循环——让代码学会“思考”和“重复”

各位同学,欢迎来到第四章。这一章的内容,我个人认为是Python入门的分水岭。

为什么这么说?因为前面的变量、数据类型,说白了就是“存储数据”。但从分支和循环开始,你的代码将拥有“判断能力”和“重复执行能力”。这才是程序真正“智能”的起点。

我当年刚学编程时,卡在循环上整整两天。后来想通了,其实就是一句话:让计算机替你做那些重复又无聊的事。好,我们开始。

4.1 运算符——判断的基础

在讲if之前,得先聊聊运算符。因为判断的本质,就是“比较两个东西”。

4.1.1 比较运算符

这些符号你小学就见过,只是写法有点不同:

运算符含义示例结果
==等于5 == 5True
!=不等于5 != 3True
>大于7 > 3True
<小于2 < 8True
>=大于等于5 >= 5True
<=小于等于4 <= 3False
我踩过的坑: 刚开始写代码时,我经常把 == 写成 =。一个等号是赋值,两个等号才是判断。这个错误,我估计每个程序员都犯过至少三次。

4.1.2 逻辑运算符

有时候一个条件不够,需要组合判断。这时候就用 andornot

# 逻辑运算符示例
age = 25
has_id = True

# and:两个都满足才行
if age >= 18 and has_id:
    print("可以进入网吧")

# or:满足一个就行
if age < 12 or age > 60:
    print("可以免票")

# not:取反
if not has_id:
    print("请出示身份证")

我个人习惯把逻辑运算符读成中文来理解:and就是“并且”,or就是“或者”,not就是“不”。这样写代码时思路会清晰很多。

4.2 if判断语句——让代码做选择

if语句,说白了就是“如果...就...”。这是程序最基础的决策能力。

4.2.1 基本if结构

score = 85

if score >= 60:
    print("恭喜,及格了!")

注意看:if后面跟条件,条件后面有个冒号。然后缩进的代码,就是条件成立时要执行的。这个缩进很关键,Python靠它来识别代码块。

4.2.2 if-else语句

有“如果”,自然就有“否则”。

score = 45

if score >= 60:
    print("及格了")
else:
    print("不及格,需要补考")
核心要点: if和else后面都有冒号,else后面不跟条件。它表示“前面条件不成立时,就执行这里”。

4.2.3 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}")

我在项目中遇到过一个问题:有人把 elif 写成了 else if。在Python里,else if 是错的,必须连写成 elif。嗯,这个细节要注意。

4.3 while循环——重复直到条件不满足

循环,就是让计算机反复做同一件事。while循环的逻辑很简单:只要条件为真,就一直执行

# 打印1到5
count = 1
while count <= 5:
    print(count)
    count += 1  # 别忘了这一行!
我曾经犯过的错: 忘记写 count += 1,结果程序陷入了无限循环,电脑风扇呼呼转。如果你遇到程序卡死,先检查循环变量有没有更新。

while循环最适合用在“不知道要循环多少次”的场景。比如用户输入密码,直到正确为止:

password = ""
while password != "123456":
    password = input("请输入密码:")
    if password != "123456":
        print("密码错误,请重试")
print("登录成功!")

4.4 for循环——遍历的利器

for循环和while不同。它更适合“我知道要循环多少次”或者“我要遍历一个序列”的情况。

4.4.1 遍历列表

fruits = ["苹果", "香蕉", "橘子", "西瓜"]
for fruit in fruits:
    print(f"我喜欢吃{fruit}")

你看,for循环会自动从列表中取出每个元素,赋值给变量 fruit,然后执行循环体。简洁又优雅。

4.4.2 配合range()使用

如果想循环指定次数,用 range()

# 打印0到4
for i in range(5):
    print(i)

# 打印2到6
for i in range(2, 7):
    print(i)

# 打印1到9,步长为2(即奇数)
for i in range(1, 10, 2):
    print(i)
我的习惯: 需要循环次数时,我首选for+range。while一般留给“条件驱动”的场景。这样代码读起来更直观。

4.5 break和continue——循环的控制开关

有时候,我们需要在循环中途“跳出来”或者“跳过某一次”。这时候break和continue就派上用场了。

4.5.1 break——立即终止循环

# 找到第一个能被7整除的数
for i in range(1, 100):
    if i % 7 == 0:
        print(f"找到了:{i}")
        break  # 找到后立即停止

break就像紧急刹车。一旦执行,整个循环立刻结束,后面的循环次数都不再执行。

4.5.2 continue——跳过本次循环

# 打印1到10中的偶数
for i in range(1, 11):
    if i % 2 != 0:
        continue  # 奇数就跳过
    print(i)

continue是“跳过这一次,继续下一次”。它不会终止循环,只是忽略当前这次。

区别记忆法: break是“不干了,全剧终”;continue是“这次算了,下次继续”。

4.6 实战小案例——猜数字游戏

把今天学的知识串起来,写个小游戏:

import random

target = random.randint(1, 100)
guess = 0
attempts = 0

print("猜数字游戏开始!范围1-100")

while guess != target:
    try:
        guess = int(input("请输入你的猜测:"))
        attempts += 1
        
        if guess < target:
            print("猜小了,再大一点")
        elif guess > target:
            print("猜大了,再小一点")
        else:
            print(f"恭喜!猜对了!用了{attempts}次")
            break
    except ValueError:
        print("请输入有效的数字!")
        continue

这个例子包含了if-elif-else、while循环、break、continue。你想想看,如果没有循环,你得写多少个if才能实现“反复猜”的功能?

4.7 本章小结

好,我们来捋一捋今天的内容:

  • 运算符:比较运算符(==, !=, >, <)和逻辑运算符(and, or, not)是判断的基础
  • if判断:单分支用if,双分支用if-else,多分支用if-elif-else
  • while循环:条件为真就重复,适合不确定次数的场景
  • for循环:遍历序列或指定次数,配合range()使用
  • break和continue:break终止整个循环,continue跳过当前这次
最后说一句: 循环和判断是编程的“左右手”。我见过太多初学者在这上面栽跟头,但只要你多写几个小项目,比如猜数字、计算器、登录系统,这些东西就会变成你的肌肉记忆。别怕犯错,我曾经一个死循环跑了半小时才发现问题——嗯,从那以后我写循环都会先检查退出条件。

下一章,我们将学习字符串和列表的进阶操作。到时候你会发现,有了循环,处理数据简直如虎添翼。