查看全课大纲(第 15 / 51 节)
  1. 1.Python 是什么?为什么值得学?
  2. 2.如何为 Python 编程准备一个“全家桶”环境?
  3. 3.Python 有哪几种执行方法?
  4. 4.行与缩进到底有什么用?
  5. 5.注释有什么用,怎么写?
  6. 6.变量:如何给数据起个好名字?
  7. 7.运算符的优先级和常见坑点是什么?
  8. 8.Python 中,数字和布尔值究竟有哪几种?
  9. 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
  10. 10.如何将程序的结果展示给用户或保存下来?
  11. 11.CSV 文件怎么读怎么写才方便?
  12. 12.列表是什么,如何创建和访问它?
  13. 13.列表的修改操作,有哪些方法?
  14. 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
  15. 15.判断语句:如何让程序根据条件做不同的事?
  16. 16.for 循环如何遍历序列中的元素?
  17. 17.while 循环什么时候才会停?
  18. 18.while 循环的结束条件,你写对了吗?
  19. 19.循环中途想提前结束,怎么办?
  20. 20.`break` 和 `continue` 到底有什么区别?
  21. 21.列表推导式如何让代码更简洁高效?
  22. 22.字符串怎么定义、拼接和操作?
  23. 23.元组:为什么定义单个元素时要加逗号?
  24. 24.集合(set)怎么用?如何快速去重和做集合运算?
  25. 25.字典是什么,为什么比列表更方便?
  26. 26.字典的增删改查与遍历,如何避免 KeyError?
  27. 27.函数里的变量,为什么有的能用有的不能用?
  28. 28.在函数内部修改全局变量,为什么有时不生效?
  29. 29.函数里能修改全局变量吗?返回值怎么用?
  30. 30.匿名函数:如何用 lambda 快速定义简单函数?
  31. 31.面向对象编程是什么,为什么需要它?
  32. 32.类中的方法和属性到底怎么定义和使用?
  33. 33.如何控制对对象内部属性和方法的访问?
  34. 34.异常发生时,程序会怎样继续执行?
  35. 35.如何组织代码:包和模块
  36. 36.`if __name__ == '__main__'` 到底有什么用?
  37. 37.如何用 IDE 的 Debug 功能排查程序错误?
  38. 38.Matplotlib 绘图的第一步该做什么?
  39. 39.Figure 是什么,如何设置图形尺寸?
  40. 40.如何自定义 Matplotlib 的坐标轴?
  41. 41.如何为图表添加图例,让不同曲线一目了然?
  42. 42.饼图怎么画才能直观展示数据占比?
  43. 43.如何用 Matplotlib 绘制散点图?
  44. 44.柱状图怎么画?
  45. 45.如何使用 Matplotlib 绘制等高线图?
  46. 46.如何在 Matplotlib 中绘制子图?
  47. 47.zip 函数如何把多个列表“打包”在一起?
  48. 48.如何给可迭代对象加上索引?
  49. 49.random 模块如何生成随机数?
  50. 50.math 模块怎么用?
  51. 51.Counter 如何快速统计元素出现次数?

判断语句:如何让程序根据条件做不同的事?

约 11 分钟

小象实战讲义 · Python 编程从入门到实践

在上一章,我们学习了 Python 的基本数据结构,代码都是按顺序一行行执行的。但在实际编程中,我们常常需要根据不同的情况执行不同的操作。本节我们将学习判断语句,它是控制程序流程的基础,能让你的代码“思考”和“做决定”。学完本节,你将能编写出能根据用户输入或数据状态执行不同分支逻辑的程序。

💡 核心导读

  • if-else 结构:理解条件判断的基本语法,掌握代码块的缩进规则。
  • 多条件判断 (elif):当有多个互斥条件时,如何使用 elif 进行链式判断。
  • 嵌套判断:在条件分支内部再进行判断,实现更复杂的逻辑。
  • 条件的本质:判断语句的条件最终都会求值为布尔值 (True 或 False)。
  • 常见坑点:缩进错误、把比较运算符 == 写成赋值运算符 =、把互斥条件写成多个并列的 if。

条件判断的基本语法:if-else

在 Python 中,使用 if 和 else 关键字来实现条件判断。其基本结构如下:

if 条件:
    # 条件为 True 时执行的代码块
else:
    # 条件为 False 时执行的代码块

关键点解析:

  1. 条件:可以是一个布尔变量 (True/False),也可以是一个能产生布尔值的表达式(例如比较运算 age > 18)。
  2. 冒号 (:):if 和 else 语句末尾必须跟一个冒号,这是 Python 语法的规定。
  3. 代码块与缩进:冒号下一行开始,所有需要在该条件下执行的代码,必须统一缩进(通常用 4 个空格)。缩进结束,意味着该代码块结束。这是 Python 定义代码逻辑范围的核心方式。

示例:判断数字正负

# 示例:判断一个数字是正数还是非正数
num = -5

if num > 0:
    print("{} 是一个正数。".format(num))
else:
    print("{} 不是一个正数(它是零或负数)。".format(num))
-5 不是一个正数(它是零或负数)。

多条件判断:if-elif-else

当我们需要在多个互斥的条件中进行选择时,可以使用 elif(else if 的缩写)来添加更多的判断分支。程序会从上到下依次检查每个条件,一旦某个条件为 True,就执行对应的代码块,然后跳过后续所有 elif 和 else。

if 条件1:
    逻辑代码1
elif 条件2:
    逻辑代码2
elif 条件3:
    逻辑代码3
else:
    其他逻辑代码

示例:简易计算器 下面的程序根据用户输入的运算符,执行对应的计算。我们先将 input() 输入替换为固定值以便演示。

# 模拟用户输入:第一个数字、运算符、第二个数字
# 实际运行时,可将下面三行替换为:
# num_str_1 = input("请输入第一个数字:")
# operator = input("请输入运算符:")
# num_str_2 = input("请输入第二个数字:")
num_str_1 = "8"
operator = "/"
num_str_2 = "2"

num_1 = int(num_str_1)
num_2 = int(num_str_2)
err = False  # 用一个标志变量记录是否发生错误(输入了不支持的运算符)

if operator == "+":
    result = num_1 + num_2
elif operator == "-":
    result = num_1 - num_2
elif operator == "*":
    result = num_1 * num_2
elif operator == "/":
    result = num_1 / num_2  # 注意:在 Python 3 中,除法 / 总是返回浮点数
else:
    err = True
    print("该类型计算暂不支持!")

# 如果没有错误(即 err 为 False),则打印结果
# `not err` 表示对 err 取反。err 为 False 时,not err 为 True。
if not err:
    # 使用格式化字符串打印算式和结果
    print("{}{}{}={}".format(num_1, operator, num_2, result))
8/2=4.0

运行逻辑:

  1. 用户输入 8、/、2。
  2. 程序依次检查 operator 是否等于 "+"、"-"、"*",都不成立。
  3. 检查到 operator == "/" 成立,执行 result = 8 / 2,然后跳过后面的 else 分支。
  4. 因为 err 仍为 False,所以 not err 为 True,执行打印语句。

如果输入一个不支持的运算符(如 "!"),程序会进入最后的 else 分支,将 err 设为 True 并打印错误提示,最后的 if not err: 判断就不会通过,不会打印计算结果。

嵌套判断

嵌套判断是指在一个判断分支的代码块内部,再包含另一个完整的 if-elif-else 结构。这用于处理更复杂的、分层级的条件。

示例:判断数字的奇偶性和大小

# 模拟用户输入一个整数
# 实际运行时,可替换为:num = int(input("请输入一个数字:"))
num = 19

if num % 2 == 0:  # 条件1:判断是否为偶数(除以2余数为0)
    # 进入偶数分支后,再进行内部判断
    if num > 10:   # 内部条件1
        print('这是个大偶数!')
    else:          # 内部条件1不满足
        print('这是个小偶数!')
else:  # 条件1不满足,即为奇数
    # 奇数分支的内部判断
    if num > 10:   # 内部条件2
        print('这是个大奇数!')
    else:          # 内部条件2不满足
        print('这是个小奇数!')
这是个大奇数!

执行流程:

  1. 判断 19 % 2 == 0?结果为 False,进入外层的 else 分支(奇数分支)。
  2. 在奇数分支的代码块内,判断 num > 10?结果为 True,执行对应的 print 语句。

📝 动手练一练

  1. 成绩等级判断:编写一个程序,输入一个分数(0-100),根据以下规则输出等级:
    • 90分及以上:优秀
    • 80-89分:良好
    • 70-79分:中等
    • 60-69分:及格
    • 60分以下:不及格 请使用 if-elif-else 结构实现。
👉 点击查看参考答案

思路:将分数作为整数输入,然后使用多个 elif 分支判断其所在区间。注意条件的顺序,应从高分到低分或从低分到高分依次判断,避免逻辑重叠。

# 模拟输入分数
score = 85  # 可以修改这个值测试不同情况

if score >= 90:
    grade = "优秀"
elif score >= 80:
    grade = "良好"
elif score >= 70:
    grade = "中等"
elif score >= 60:
    grade = "及格"
else:
    grade = "不及格"

print("分数 {} 对应的等级是:{}".format(score, grade))
分数 85 对应的等级是:良好

常见错误

错误写法现象或报错原因正确写法
if age > 18:
print("成年")
else:
print("未成年")
IndentationError: expected an indented block after 'if' statement on line 1if 语句后的 print 没有缩进,Python 无法识别这是要执行的代码块。if age > 18:
    print("成年")
else:
    print("未成年")
if score = 60:
    print("及格")
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?在条件判断中错误地使用了赋值运算符 =,而不是比较运算符 ==。if score == 60:
    print("及格")
使用多个独立的 if 语句来判断互斥条件,如:
if x > 10: ...
if x > 5: ...
if x > 0: ...
逻辑错误。当 x=15 时,三个 print 都会执行,而这可能不是期望的结果。多个 if 是独立的,都会被执行判断。对于互斥条件,应使用 if-elif-else 结构。if x > 10:
    ...
elif x > 5:
    ...
elif x > 0:
    ...
else:
    ...

小结

  1. if-else 是基础:if 用于判断条件是否成立 (True),else 处理不成立 (False) 的情况。末尾的冒号和代码块的缩进是语法关键。
  2. elif 处理多分支:当有多个互斥条件时,使用 if-elif-elif-else 结构,程序按顺序判断,执行第一个满足条件的分支后即结束。
  3. 嵌套实现复杂逻辑:可以在一个条件分支的代码块内,再嵌入完整的判断语句,实现层级化的条件判断。
  4. 条件求值为布尔值:if 后面的条件表达式(如比较、逻辑运算)或变量,最终都会被解释为 True 或 False。
  5. 使用标志变量:像示例中的 err 变量,是一种常见的控制流程技巧,用于记录某个状态并在后续判断中使用。

📋 行动清单

  • 将计算器示例中的固定输入改回 input() 语句,并运行测试不同的运算符。
  • 在嵌套判断的示例中,尝试输入 2、10、11 等数字,观察输出是否符合预期。
  • 自己设计一个场景(如根据天气决定活动),用 if-elif-else 结构写一段代码。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第2章代码包:判断语句(含1 个 Notebook)
    ZIP · 904B
    下载