深色模式
第 03 章 · 条件与循环:让程序会判断、会重复
本章目标
学会 if 判断和 for/while 循环,这是程序"有脑子"的开始。
3.1 if 语句
python
score = 85
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
else:
print("不及格")三条规矩:
- 条件后面有冒号
: - 下一行必须缩进(统一 4 个空格)
elif可以有很多个,else最多一个
Python 里不存在"先写 if 再 else if" —— 就是 elif。
比较运算符
python
print(3 > 2) # True
print(3 == 2) # False ← 判断相等用 ==(= 是赋值!)
print(3 != 2) # True
print(2 <= 2) # True
print(1 < 2 < 3) # True ← Python 支持连写逻辑运算
python
age = 20
has_id = True
if age >= 18 and has_id:
print("可以进入")
if age < 18 or not has_id:
print("不行")
if "a" in "apple":
print("包含")and两边都为真才为真;or有一个真就真;not取反。in判断成员关系(字符串、列表、字典都能用)。
3.2 while 循环
python
count = 3
while count > 0:
print(f"倒计时 {count}")
count = count - 1 # 也可以写 count -= 1
print("发射!")输出:
text
倒计时 3
倒计时 2
倒计时 1
发射!⚠️ 死循环:如果忘了让 count 变小,程序会一直跑。命令行里按 Ctrl + C 强制中断。
3.3 for 循环与 range()
python
for i in range(3):
print(i) # 0 1 2
for i in range(1, 4):
print(i) # 1 2 3 (含头不含尾)
for i in range(0, 10, 2):
print(i) # 0 2 4 6 8
for ch in "abc":
print(ch) # a b c
for x in [10, 20, 30]:
print(x)for ... in ... 的意思是"把后面那串东西里的每一个,轮流取出来放进变量"。这是 Python 最常用的循环写法。
3.4 break、continue 和循环的 else
python
for i in range(1, 10):
if i == 3:
continue # 跳过本次,进入下一轮
if i == 6:
break # 直接结束整个循环
print(i) # 1 2 4 5循环的 else:循环"跑完了、没被 break 打断"时执行(不是"否则",别按 if/else 的直觉读)。
它最典型的用途是"找东西":找到了就 break(else 不执行),找遍了都没有才走 else。
python
names = ["小明", "小红", "小刚"]
target = "小红"
for name in names:
if name == target:
print(f"找到了:{name}")
break
else:
print(f"名单里没有 {target}")
# 输出:找到了:小红换个目标再看,就能看出 else 什么时候才执行:
python
for name in names:
if name == "小李":
print("找到了")
break
else:
print("名单里没有 小李") # ← 循环正常结束,这句会执行记忆口诀:
else= "一直没 break 过"。用它就不用额外再写一个found = False标志位了。
3.5 pass 与 match
pass 是"什么都不做"的占位符,写框架时用:
python
if True:
pass # 先占位,以后补match(Python 3.10+)用来做多分支匹配,比一长串 if 清楚:
python
command = "quit"
match command:
case "quit":
print("退出")
case "help" | "h":
print("显示帮助")
case _:
print("未知命令")_ 表示"其它所有情况"。知道有这个语法即可,日常 if/elif 足够。
3.6 循环嵌套与常见套路
python
# 打印 9x9 乘法表(前 4 行)
for i in range(1, 5):
for j in range(1, i + 1):
print(f"{j}x{i}={i*j}", end="\t")
print() # 换行累加 / 计数 / 找最大值 三件套:
python
nums = [3, 7, 2, 9, 5]
total = 0
for n in nums:
total += n # 累加
count = 0
for n in nums:
if n > 4:
count += 1 # 计数
biggest = nums[0]
for n in nums:
if n > biggest:
biggest = n # 找最大进阶写法(第 05 章):
sum(nums)、max(nums)一行搞定。先会手写,才知道内部在干嘛。
3.7 高频错点与修正
| 错误写法 | 后果 | 正确写法 |
|---|---|---|
if x = 1: | SyntaxError | if x == 1: |
| 忘了缩进 | IndentationError | 冒号后所有行缩进 4 空格 |
while 里忘了改条件 | 死循环 | 循环体内改变判断变量 |
for i in 5: | TypeError | for i in range(5): |
| 中英文标点混用 | SyntaxError | 冒号括号都要用英文符号 |
3.8 练一练
- 判断年份是不是闰年(能被 4 整除且不能被 100 整除,或者能被 400 整除)。
- 打印 1 到 100 之间所有能被 3 整除的数,并统计有几个。
- 猜数字小游戏简易版:给定答案
7,让用户反复输入,直到猜中,提示"大了/小了"。 - 用
while把用户输入的数字累加,输入0时停止并输出总和。
本章关键词
if / elif / else、缩进、and or not、while、for ... in、range()、break / continue、pass、match