本章摘要

  1. 核心目标:让程序学会根据不同条件做选择,实现"如果…就…否则…"的逻辑
  2. 核心知识点:比较运算符(== / != / > / < / >= / <=)、逻辑运算符(and / or / not)、if 单分支、if-else 双分支、if-elif-else 多分支、嵌套 if、条件表达式(三元运算符)
  3. 实操产出:成绩等级判定程序、闰年判断工具、综合信息录入小程序(第一部分毕业案例)
  4. 前置基础:第2章 print 输出、变量赋值、input 输入、数据类型与类型转换

一、写在前面

上一章我们写的程序都是"从头到尾一条路走到底"——代码从上往下依次执行,每一行都会运行。

但现实生活不是这样的:

  • 考试 大于 60 分 → 及格,否则 → 不及格
  • 年龄 大于等于 18 → 成年,否则 → 未成年
  • 天气 晴天 温度 大于 25 → 出去玩,否则 → 待在家

这些场景有一个共同特征:根据条件决定做什么。Python 用 if / elif / else 来实现这个能力,这是编程中最核心的逻辑之一——条件判断。


二、比较运算符

条件判断的基础是"比较"。Python 提供了 6 个比较运算符,用来比较两个值的大小或是否相等:

运算符 含义 示例 结果
== 等于 10 == 10 True
!= 不等于 10 != 20 True
> 大于 20 > 10 True
< 小于 5 < 10 True
>= 大于等于 10 >= 10 True
<= 小于等于 5 <= 10 True

比较运算的结果一定是布尔值:TrueFalse

print(10 == 10)    # True
print(10 != 20)    # True
print(20 > 30)     # False
print("abc" == "abc")   # True,字符串也可以比较
print("abc" == "ABC")   # False,区分大小写

⚠️ 新手最容易犯的错= 是赋值,== 是比较。

  • age = 18 → 把 18 赋值给 age
  • age == 18 → 判断 age 是否等于 18

if 语句里用 = 会导致语法错误,记住:判断用双等号


三、逻辑运算符

有时候一个条件不够,需要组合多个条件。Python 提供三个逻辑运算符:

3.1 and(并且)

所有条件都为 True,结果才为 True

# 语文和数学都及格才算通过
chinese = 80
math = 90
print(chinese >= 60 and math >= 60)   # True,两门都及格

chinese = 50
math = 90
print(chinese >= 60 and math >= 60)   # False,语文没及格

3.2 or(或者)

只要有一个条件为 True,结果就为 True

# 语文或数学任意一门优秀就算特长生
chinese = 85
math = 55
print(chinese >= 85 or math >= 85)   # True,语文达到了

chinese = 70
math = 70
print(chinese >= 85 or math >= 85)   # False,都没达到

3.3 not(取反)

TrueFalse,把 FalseTrue

is_raining = False
print(not is_raining)   # True,没下雨

is_student = True
print(not is_student)   # False

3.4 逻辑运算真值表

条件A 条件B A and B A or B not A
True True True True False
True False False True False
False True False True True
False False False False True

口诀:and 全真才真,or 有真即真,not 真假互换
在这里插入图片描述


四、if 语句:满足条件才执行

4.1 基本结构

if 语句最简单的形式:条件为 True 时执行缩进块内的代码,为 False 时跳过。

age = 20

if age >= 18:
    print("你已经成年了")
    print("可以办理身份证")

print("程序结束")

运行结果:

你已经成年了
可以办理身份证
程序结束

如果把 age 改成 15:

程序结束

关键:缩进。Python 用缩进(4 个空格)表示哪些代码属于 if 语句。缩进在内的代码只有条件为 True 时才执行,缩进外的代码无论如何都会执行。

4.2 缩进规则

score = 85

if score >= 60:
    print("及格了")        # ✅ 属于 if,条件满足才执行
    print("继续努力")      # ✅ 也属于 if
print("检查完毕")          # ❌ 不属于 if,无论如何都执行

VS Code 默认按 Tab 键自动缩进 4 个空格,不用手动数空格。


五、if-else:二选一

if 只管条件满足时做什么,else 补上条件不满足时做什么:

score = 55

if score >= 60:
    print("及格了")
else:
    print("不及格,继续努力")

运行结果:

不及格,继续努力

条件满足走 if 分支,不满足走 else 分支,两条路必走其一


六、if-elif-else:多选一

现实中的判断往往不止两种结果。比如成绩分等级:

  • 90 分以上 → 优秀
  • 80-89 → 良好
  • 60-79 → 及格
  • 60 以下 → 不及格
    在这里插入图片描述

elifelse if 的缩写)串联多个条件:

score = 85

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

运行结果:

良好

执行逻辑:从上往下依次判断,遇到第一个为 True 的条件就执行对应分支,然后跳出整个 if-elif-else 结构,后面的条件不再检查。

所以条件顺序很重要。如果把 score >= 60 放在最前面,85 分会先命中"及格"就跳出了,永远不会走到"良好"。

规则:从严格到宽松,从上到下排


七、嵌套 if

if 里面还可以再套 if,实现更细致的判断:

age = 20
has_id = True

if age >= 18:
    if has_id:
        print("成年且有身份证,可以办理")
    else:
        print("成年但没带身份证,请先补办")
else:
    print("未成年,无法办理")

运行结果:

成年且有身份证,可以办理

嵌套层数不宜过多,一般不超过 3 层,否则代码可读性会很差。多数情况下可以用 and / or 组合条件来替代嵌套。


八、条件表达式(三元运算符)

简单的 if-else 可以写成一行,叫条件表达式:

# 常规写法
if score >= 60:
    result = "及格"
else:
    result = "不及格"

# 条件表达式(一行搞定)
result = "及格" if score >= 60 else "不及格"

两种写法完全等价,条件表达式更简洁,适合简单赋值场景。

第2章综合案例里出现的 {'一致' if age == calculated_age else '不一致'} 就是条件表达式,现在你应该能看懂了。


九、Scratch 积木对照

Scratch Python 说明
「如果…那么」积木 if 条件: 条件满足时执行
「如果…那么…否则」积木 if-else 条件满足走 if,不满足走 else
多个「如果」嵌套 if-elif-else 多条件分支
Scratch 中的条件槽(六边形) 比较运算符 == / > / < 填入条件判断

scratch积木代码
在这里插入图片描述
python代码

# Scratch「如果…那么…否则」积木 → Python
score = 75
if score >= 60:
    print("及格")
else:
    print("不及格")

Scratch 里拖一个"如果…那么…否则"积木,六边形槽里放比较条件;Python 里写 if-else,条件写在 if 后面。逻辑一模一样,只是从拖积木变成了写代码。


十、综合实战:成绩等级判定程序

把比较运算符、逻辑运算符、if-elif-else、条件表达式全部串起来:

# ========================================
# 成绩等级判定程序
# ========================================

print("=" * 35)
print("    成绩等级判定系统")
print("=" * 35)

# 接收用户输入
name = input("请输入学生姓名:")
score = float(input("请输入考试成绩(0-100):"))

# 判断成绩是否在合法范围
if score < 0 or score > 100:
    print("⚠️ 成绩不在有效范围内(0-100),请重新输入")
else:
    # 等级判定
    if score >= 90:
        grade = "优秀"
    elif score >= 80:
        grade = "良好"
    elif score >= 70:
        grade = "中等"
    elif score >= 60:
        grade = "及格"
    else:
        grade = "不及格"

    # 判断是否需要补考
    need_retest = "是" if score < 60 else "否"

    # 输出结果
    print()
    print("-" * 35)
    print(f"学生姓名:{name}")
    print(f"考试成绩:{score}")
    print(f"成绩等级:{grade}")
    print(f"是否补考:{need_retest}")
    print("-" * 35)

    # 鼓励语
    if score >= 90:
        print("🌟 表现优异,继续保持!")
    elif score >= 60:
        print("👍 成绩合格,还有提升空间")
    else:
        print("💪 别灰心,下次加油!")

运行效果:

===================================
    成绩等级判定系统
===================================
请输入学生姓名:小明
请输入考试成绩(0-100):85

-----------------------------------
学生姓名:小明
考试成绩:85.0
成绩等级:良好
是否补考:否
-----------------------------------
👍 成绩合格,还有提升空间

分步拆解:

  1. 输入与类型转换float(input(...)) 一步完成输入和类型转换,因为成绩可能有 85.5 这样的带小数
  2. 合法性检查:用 or 判断成绩是否超出 0-100 范围,超出直接提示,不继续判定
  3. 等级判定if-elif-else 从高到低依次判断,命中一个就跳出
  4. 条件表达式need_retest 用三元运算符一行赋值,简洁明了
  5. 鼓励语:独立的 if-elif 判断,与等级判定解耦,逻辑清晰

十一、综合实战:简易信息录入小程序(第一部分毕业案例)

这是第一部分(准备篇)的综合案例,综合运用第1-3章所有知识:

# ========================================
# 简易信息录入小程序(第一部分综合案例)
# 综合运用:print + input + 变量 + 数据类型 + 类型转换 + if 条件判断
# ========================================

print("=" * 40)
print("   欢迎使用简易信息录入系统 v1.0")
print("=" * 40)

# 1. 接收用户基本信息
name = input("请输入你的姓名:")
age = int(input("请输入你的年龄:"))

# 2. 根据年龄判断身份
if age < 0:
    print("⚠️ 年龄不能为负数,程序退出")
elif age > 150:
    print("⚠️ 年龄超出合理范围,程序退出")
else:
    # 3. 判断成年/未成年
    if age >= 18:
        status = "成年人"
        print(f"你好 {name},你已成年,可以继续录入信息。")
    else:
        status = "未成年人"
        print(f"你好 {name},你还未成年,需在家长陪同下继续。")

    # 4. 接收更多信息
    print()
    city = input("请输入你所在的城市:")
    hobby = input("请输入你的爱好:")

    # 5. 根据年龄段给出不同问候
    if age < 12:
        greeting = "小朋友"
    elif age < 18:
        greeting = "同学"
    elif age < 60:
        greeting = "朋友"
    else:
        greeting = "前辈"

    # 6. 输出信息卡片
    print()
    print("=" * 40)
    print("        信息录入完成")
    print("=" * 40)
    print(f"  称呼:{greeting}")
    print(f"  姓名:{name}")
    print(f"  年龄:{age} 岁({status})")
    print(f"  城市:{city}")
    print(f"  爱好:{hobby}")
    print("=" * 40)

    # 7. 额外提示
    if age >= 18 and city == "北京":
        print("📌 提示:北京成年人可办理一卡通")
    elif age < 18:
        print("📌 提示:未成年请注意劳逸结合")
    else:
        print("📌 提示:感谢使用本系统")

运行效果:

========================================
   欢迎使用简易信息录入系统 v1.0
========================================
请输入你的姓名:小明
请输入你的年龄:18

你好 小明,你已成年,可以继续录入信息。

请输入你所在的城市:北京
请输入你的爱好:编程

========================================
        信息录入完成
========================================
  称呼:朋友
  姓名:小明
  年龄:18 岁(成年人)
  城市:北京
  爱好:编程
========================================
📌 提示:北京成年人可办理一卡通

分步拆解:

  1. 基本信息输入input + int 类型转换,和第2章学的一样
  2. 异常值拦截:用 if-elif 先检查年龄合法性,负数或超 150 直接退出
  3. 成年判断:嵌套 if 判断成年/未成年,用变量 status 记录结果
  4. 年龄段分类if-elif-else 将年龄映射到不同称呼,体现多分支选择
  5. 组合条件age >= 18 and city == "北京"and 组合两个条件,只有同时满足才触发特定提示
  6. 变量复用statusgreeting 先赋值再统一输出,体现"先计算、后展示"的编程思路

这个案例涵盖了第1-3章的全部核心知识:环境运行、print 输出、变量、数据类型、input 输入、类型转换、比较运算符、逻辑运算符、if-elif-else、嵌套 if、条件表达式。能独立写出来,说明第一部分已经掌握了。


十二、常见报错速查表

报错信息 出现场景 原因 解决方法
SyntaxError: expected ':' if 语句 if 条件后忘了写冒号 : 补上冒号:if age >= 18:
IndentationError: expected an indented block if 语句 if 冒号后没有缩进的代码块 至少写一行缩进代码,或写 pass
SyntaxError: invalid syntax if 语句 误用 = 代替 == 做比较 判断相等用 ==,赋值用 =
NameError: name 'True' is not defined 布尔值 写成 trueTRUE(小写或全大写) Python 布尔值首字母大写:True / False
IndentationError: unindent does not match 嵌套 if 缩进层级不一致,混用空格和 Tab 统一用 4 个空格缩进,不要混用 Tab

十四、本章小结

本章你掌握了 Python 条件判断的完整体系:

  1. 比较运算符——== / != / > / < / >= / <=,比较结果是布尔值 True / False
  2. 逻辑运算符——and(全真才真)、or(有真即真)、not(真假互换),用来组合多个条件
  3. if-elif-else——单分支、双分支、多分支,从上往下匹配,命中即跳出
  4. 嵌套 if——if 里面套 if,处理更细致的判断,一般不超过 3 层
  5. 条件表达式——值A if 条件 else 值B,简单赋值一行搞定

条件判断让程序从"只会顺着走"变成"会做选择",这是编程逻辑的第一次飞跃。

往期回顾:

《Python 零基础入门:从积木到代码》专栏序

零基础学 Python 第1章 | 全平台装环境 + VS Code 配置 + 第一个 Hello World

零基础学 Python 第2章 | print 输出 + 变量赋值 + input 交互输入

下一章预告

程序现在能做判断了,但如果有件事要重复做 100 次呢?总不能写 100 行代码。下一章学习 for 循环range(),让程序学会自动重复,配合 breakcontinue 精确控制循环流程。


文末资源区

资源 说明
Python 官方文档 - if 语句 https://docs.python.org/3/tutorial/controlflow.html#if-statements
Python 官方文档 - 比较运算 https://docs.python.org/3/library/stdtypes.html#comparisons
Python 官方文档 - 布尔运算 https://docs.python.org/3/library/stdtypes.html#boolean-operations
本章完整源码 chapter3_all.py(关注梅雅达编程笔记,订阅领资料)

每节课都配套课后练习题与完整源码。

代码报错、看不懂知识点,可在评论区粘贴问题,逐一解答!
欢迎关注梅雅达编程笔记,持续分享Python零基础学习内容

更多推荐