Skip to content

第 03 章 · 条件与循环:让程序会判断、会重复 ​

本章目标 ​

学会 if 判断和 for/while 循环,这是程序"有脑子"的开始。

3.1 if 语句 ​

python
score = 85

if score >= 90:
    print("优秀")
elif score >= 60:
    print("及格")
else:
    print("不及格")

三条规矩:

  1. 条件后面有冒号 :
  2. 下一行必须缩进(统一 4 个空格)
  3. 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:SyntaxErrorif x == 1:
忘了缩进IndentationError冒号后所有行缩进 4 空格
while 里忘了改条件死循环循环体内改变判断变量
for i in 5:TypeErrorfor i in range(5):
中英文标点混用SyntaxError冒号括号都要用英文符号

3.8 练一练 ​

  1. 判断年份是不是闰年(能被 4 整除且不能被 100 整除,或者能被 400 整除)。
  2. 打印 1 到 100 之间所有能被 3 整除的数,并统计有几个。
  3. 猜数字小游戏简易版:给定答案 7,让用户反复输入,直到猜中,提示"大了/小了"。
  4. 用 while 把用户输入的数字累加,输入 0 时停止并输出总和。

本章关键词 ​

if / elif / else、缩进、and or not、while、for ... in、range()、break / continue、pass、match

试图用自己的方式,重新定义属于我的人生