Python 从零开始 · 第 3 课:判断与循环——让程序会做选择
上一课我们学会了用变量"记东西",用 print() 把结果打出来。但你有没有发现,到目前为止,程序都是一条直线往下走,一行接一行,从不停顿、从不拐弯。
现实里的问题哪有这么简单?
- "如果今天是周末,就睡到自然醒;否则,就 7 点起床。"
- "把这一堆作业,一道一道全部做完。"
- "用户输入的密码错了,就让他重新输,直到对为止。"
这些,分别对应程序里最最重要的三件事:判断、循环、以及它们的组合。学会了它们,你的程序就从"念台词的机器"变成了"会思考的小脑瓜"。
一、比较运算:让程序学会"比大小"
要做判断,先得能"比"。Python 里的比较运算符,和你小学数学里的一模一样:
| 运算符 | 含义 | 例子 | 结果 |
|---|---|---|---|
== | 等于 | 5 == 5 | True |
!= | 不等于 | 5 != 3 | True |
> | 大于 | 5 > 3 | True |
< | 小于 | 3 < 5 | True |
>= | 大于等于 | 5 >= 5 | True |
<= | 小于等于 | 3 <= 5 | True |
比较的结果是一个布尔值(bool):要么 True,要么 False。第 2 课我们见过它,现在它要派大用场了。
⚠️ 新手最容易踩的坑:判断"相等"要用两个等号==,一个等号=是"赋值",不是"比较"。写错程序不会报错,但会得出奇怪的结果。
二、if:让程序"做选择"
if 的读法特别直白:如果某个条件成立,就做某件事。
age = 18
if age >= 18:
print("你已经成年了")关键点只有两个:
- 条件后面跟一个冒号
: - 要做的事要缩进(通常空 4 格,按一下 Tab 键)
缩进是 Python 的灵魂。 别的语言用大括号 {} 表示"哪些代码属于这个 if",Python 用缩进。缩进错一个空格,程序的行为就完全变了。
🧊 冷笑话:妈妈对小明说:"下楼买两个包子。要是有馒头,就买一个。"小明只带了一个包子回来。妈妈问:"怎么只买了一个?"小明:"因为有馒头。"
🎯 梗在哪:妈妈的"就买一个"有歧义——是一个馒头还是一个包子?妈妈心里的
if:默认买两个包子,if 有馒头:→ 再买一个馒头;小明心里的if:if 有馒头:→ 只买一个包子。同一个条件,宾语接错,结果就完全反了。
三、if / elif / else:三种情况都安排上
现实里往往不止"是 / 否"两种情况。比如成绩分等级:
score = 85
if score >= 90:
print("优秀")
elif score >= 70:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")if:第一个判断,必须要有。elif(else if 的缩写):上面不成立,再来判断这个。可以有任意多个。else:上面全都不成立,走这里。最多一个,放最后。
程序从上往下,哪个条件先成立就先执行哪个,然后跳出整个 if,剩下的不再看。所以顺序很重要——>= 90 一定要写在 >= 70 前面,否则"优秀"的人会被"良好"先截胡。
四、逻辑运算:多个条件一起判
有时候判断要同时满足好几个条件,用 and / or / not 把它们连起来:
age = 25
has_ticket = True
if age >= 18 and has_ticket:
print("可以进场") # 两个都满足才进来
if age < 18 or not has_ticket:
print("不能进场") # 任一满足就进来| 运算 | 含义 | 口诀 |
|---|---|---|
and | 与 | 两个都得真 |
or | 或 | 有一个真就行 |
not | 非 | 反过来 |
小心一个高频坑:age >= 18 and has_ticket不能简写成age >= 18 and == True,也注意别把and写成&、or写成|(那是位运算,是另一个东西)。
五、while 循环:重复到"不满足为止"
判断是"做一次选择",循环是"反复做一件事"。while 的读法:只要条件还成立,就一直做。
count = 1
while count <= 3:
print(f"第 {count} 次")
count = count + 1 # 每次加 1,否则会死循环!输出:
第 1 次
第 2 次
第 3 次新手必背的一句话:while 循环体里,一定要有让条件"迟早变成 False"的语句(比如 count = count + 1)。忘了写,程序就会一直转下去,这叫死循环——电脑不累,你会等疯。
经典用法:让用户"输对了才停"
password = ""
while password != "123456":
password = input("请输入密码:")
print("密码正确,欢迎!")只要用户没输对,就反复问——这正是 while 的拿手好戏。
六、for 循环:把一堆东西"挨个过一遍"
while 靠条件控制循环,for 则天生为"遍历"而生——把一串东西从头到尾,一个个拿出来处理。
names = ["张三", "李四", "王五"]
for name in names:
print(f"你好,{name}")配合 range(),for 还能按次数循环:
for i in range(5): # range(5) = 0,1,2,3,4
print(i)range(5) 会生成从 0 到 4 的 5 个数。想从 1 开始,就 range(1, 6)(左闭右开:含 1,不含 6)。
for 和 while 怎么选?
- 知道要循环几遍(遍历列表、数 1 到 100)→ 用
for,更简洁。 - 不知道几遍,靠条件决定(输对密码才停)→ 用
while。
一句话:for 遍历已知,while 等待条件。
七、break 和 continue:循环的"刹车"和"跳帧"
光会转还不够,还要能控制"什么时候停、什么时候跳过"。
break:立刻终止整个循环,跳出去。continue:跳过本次循环剩余部分,直接进入下一轮。
# break:找到第一个偶数就停
for i in [1, 3, 5, 8, 9]:
if i % 2 == 0:
print(f"找到偶数 {i},停")
break
print(i)
# 输出:1 3 5 找到偶数 8,停
# continue:跳过奇数,只打印偶数
for i in range(1, 6):
if i % 2 != 0:
continue # 奇数直接跳过,不打印
print(i)
# 输出:2 4八、判断 + 循环的组合拳:真实程序长这样
单独看判断和循环都简单,厉害的是把它们嵌套起来。比如打印九九乘法表:
for i in range(1, 10):
line = ""
for j in range(1, i + 1):
line += f"{j}x{i}={i*j}\t"
print(line)外层循环管"第几行",内层循环管"这一行打几个式子"。两层 for 一嵌套,九九乘法表就出来了——这就是程序"有逻辑"的开始。
九、动手时间 🎯
实验 1:判断奇偶
num = int(input("输入一个整数:"))
if num % 2 == 0:
print("是偶数")
else:
print("是奇数")实验 2:猜数字(判断 + while 循环)
import random
answer = random.randint(1, 100) # 随机生成 1~100
guess = 0
while guess != answer:
guess = int(input("猜一个 1~100 的数:"))
if guess > answer:
print("大了")
elif guess < answer:
print("小了")
print("猜对了!")实验 3:FizzBuzz(面试经典热身题)
从 1 数到 30:遇到 3 的倍数打印 "Fizz",5 的倍数打印 "Buzz",同时是 3 和 5 的倍数打印 "FizzBuzz",其他打印数字本身。
for i in range(1, 31):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)提示:%是取余数,i % 3 == 0就是"i 能被 3 整除"。
十、小结
- 判断用 if/elif/else,条件成立就执行,注意冒号和缩进;比较相等用
==不是=。 - 循环用 while(等条件)和 for(遍历/数次数),while 别忘了让条件终会变 False,否则死循环。
- break 跳出、continue 跳过,判断 + 循环一嵌套,就是真实程序的样子。
下一课,我们学 列表与元组——一次存一堆数据,怎么增删改查、怎么切片、怎么遍历。那是你写任何"稍微像样"的程序的必备武器。
先把「猜数字」和「FizzBuzz」敲出来,会"做选择"的程序,才算真正"活"了。