4. 分支和循环:if判断语句、运算符、if-else语句、while循环、for循环、break、continue

各位同学,今天我们来聊聊编程里的「岔路口」和「绕圈圈」。说白了,就是让代码学会做决定,以及重复干一件事。

我刚开始学Python时,觉得这玩意儿特简单——不就是从上往下执行嘛。但后来发现,真正让程序变聪明的,恰恰是这些控制结构。没有它们,代码就是一条道走到黑,毫无灵魂。

4.1 运算符:判断的基础

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

Python里的运算符分几类,我挑最常用的说:

  • 比较运算符:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)
  • 逻辑运算符:and(与)、or(或)、not(非)
  • 成员运算符:in、not in(判断是否在序列里)

举个例子你就明白了:

age = 18
print(age >= 18)   # True
print(age == 18)   # True
print(age != 20)   # True

# 逻辑运算
print(age > 10 and age < 20)  # True
print(not age > 20)            # True

# 成员运算
fruits = ['苹果', '香蕉', '橘子']
print('苹果' in fruits)  # True
小提示:我见过不少新手把 = 和 == 搞混。= 是赋值,== 才是判断相等。写错的话,Python会直接报错,但有些语言不会——那才是真正的坑。

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

if语句,说白了就是「如果……就……」。它的结构很简单:

if 条件:
    执行代码

注意那个冒号,还有缩进。Python用缩进来表示代码块,这是它的特色,也是新手最容易翻车的地方。

来看个实际例子:

score = 85

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

运行结果:恭喜,及格了!

如果score是50呢?那就什么都不输出。因为条件不满足。

注意:缩进必须统一。我建议用4个空格,别用Tab。虽然Python允许混用,但你会后悔的——我曾经在一个项目里因为缩进问题排查了半小时,最后发现是Tab和空格混了。

4.3 if-else语句:两条路

有时候我们需要「二选一」。比如:及格了说恭喜,没及格说加油。

score = 45

if score >= 60:
    print('恭喜,及格了!')
else:
    print('别灰心,下次加油!')

运行结果:别灰心,下次加油!

if-else就是两条路,非此即彼。你想想看,生活中大部分判断其实都是这种二选一。

4.4 if-elif-else:多条路

如果判断条件不止两个呢?比如成绩评级:90以上优秀,80以上良好,60以上及格,否则不及格。

这时候就需要 elif 了:

score = 88

if score >= 90:
    grade = '优秀'
elif score >= 80:
    grade = '良好'
elif score >= 60:
    grade = '及格'
else:
    grade = '不及格'

print(f'你的等级是:{grade}')

运行结果:你的等级是:良好

注意顺序——从上往下判断,一旦满足某个条件,后面的就不执行了。所以要把最严格的条件放前面。

核心要点:if-elif-else 结构,最多只会执行一个分支。这是「互斥」的。

4.5 while循环:重复直到条件不满足

循环,就是让代码反复执行。while循环的语法:

while 条件:
    执行代码

只要条件为True,就一直执行。直到条件变成False才停下。

举个最简单的例子:

count = 1
while count <= 5:
    print(f'第{count}次循环')
    count += 1  # 别忘了更新条件,否则死循环

运行结果:

第1次循环
第2次循环
第3次循环
第4次循环
第5次循环
警告:千万别忘了在循环里更新条件变量!否则就是死循环,程序会一直跑下去,直到你手动终止。我刚开始学的时候,经常不小心写出死循环,然后电脑风扇呼呼转……

4.6 for循环:遍历序列

for循环更适合遍历一个序列(列表、字符串、元组等)。语法:

for 变量 in 序列:
    执行代码

看例子:

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

运行结果:

我喜欢吃苹果
我喜欢吃香蕉
我喜欢吃橘子

如果想循环指定次数,配合 range() 函数:

for i in range(5):  # 0,1,2,3,4
    print(f'第{i}次')

range(5) 生成0到4的整数。注意,不包括5。这是Python的「左闭右开」原则。

小技巧:我个人习惯用for循环遍历列表,用while循环做条件不确定的重复操作。比如「直到用户输入正确为止」这种场景,while更合适。

4.7 break:跳出循环

有时候我们需要提前结束循环。比如:找到第一个满足条件的元素后,就不找了。

numbers = [3, 7, 2, 9, 5]
for num in numbers:
    if num > 5:
        print(f'找到第一个大于5的数:{num}')
        break  # 跳出整个循环

运行结果:找到第一个大于5的数:7

注意,break只跳出当前所在的循环。如果是嵌套循环,它只跳出最内层。

4.8 continue:跳过本次循环

continue和break不同。break是「不干了,走人」,continue是「这次算了,继续下一轮」。

for num in range(1, 6):
    if num == 3:
        continue  # 跳过3,继续下一次
    print(num)

运行结果:

1
2
4
5

3被跳过了,但循环没有终止。

对比记忆:break是「终止循环」,continue是「跳过当前,继续下一轮」。我在项目中经常用continue来过滤掉不需要的数据,比如跳过空值或异常值。

4.9 知识体系图

下面这张图帮你理清本章的知识结构:

分支和循环 分支结构 if 判断 if-else if-elif-else 循环结构 while 循环 for 循环 循环控制语句 break continue 基础:运算符(比较、逻辑、成员)

4.10 综合示例:猜数字游戏

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

import random

# 生成1-100的随机数
target = random.randint(1, 100)
guess = None
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  # 其实while条件已经会退出,但用break更明确
    except ValueError:
        print('请输入有效的数字!')
        continue  # 跳过本次,重新输入

print('游戏结束')

这个例子用到了if-elif-else、while循环、break、continue。你想想看,如果不用这些控制结构,这个游戏能写出来吗?

我的经验:写循环时,先想清楚「什么时候退出」。是条件不满足退出(while),还是遍历完退出(for),还是主动退出(break)。想清楚这个,代码就不容易写死循环。

好了,分支和循环就讲到这里。这些东西看着简单,但用好了,你的代码就有了「灵魂」。多写多练,慢慢就熟练了。

可可精品资料库