查看全课大纲(第 15 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
判断语句:如何让程序根据条件做不同的事?
约 11 分钟
小象实战讲义 · Python 编程从入门到实践
在上一章,我们学习了 Python 的基本数据结构,代码都是按顺序一行行执行的。但在实际编程中,我们常常需要根据不同的情况执行不同的操作。本节我们将学习判断语句,它是控制程序流程的基础,能让你的代码“思考”和“做决定”。学完本节,你将能编写出能根据用户输入或数据状态执行不同分支逻辑的程序。
💡 核心导读
if-else结构:理解条件判断的基本语法,掌握代码块的缩进规则。- 多条件判断 (
elif):当有多个互斥条件时,如何使用elif进行链式判断。 - 嵌套判断:在条件分支内部再进行判断,实现更复杂的逻辑。
- 条件的本质:判断语句的条件最终都会求值为布尔值 (
True或False)。 - 常见坑点:缩进错误、把比较运算符
==写成赋值运算符=、把互斥条件写成多个并列的if。
条件判断的基本语法:if-else
在 Python 中,使用 if 和 else 关键字来实现条件判断。其基本结构如下:
if 条件:
# 条件为 True 时执行的代码块
else:
# 条件为 False 时执行的代码块关键点解析:
- 条件:可以是一个布尔变量 (
True/False),也可以是一个能产生布尔值的表达式(例如比较运算age > 18)。 - 冒号 (
:):if和else语句末尾必须跟一个冒号,这是 Python 语法的规定。 - 代码块与缩进:冒号下一行开始,所有需要在该条件下执行的代码,必须统一缩进(通常用 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运行逻辑:
- 用户输入
8、/、2。 - 程序依次检查
operator是否等于"+"、"-"、"*",都不成立。 - 检查到
operator == "/"成立,执行result = 8 / 2,然后跳过后面的else分支。 - 因为
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('这是个小奇数!')这是个大奇数!执行流程:
- 判断
19 % 2 == 0?结果为False,进入外层的else分支(奇数分支)。 - 在奇数分支的代码块内,判断
num > 10?结果为True,执行对应的print语句。
📝 动手练一练
- 成绩等级判断:编写一个程序,输入一个分数(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 1 | if 语句后的 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: ... |
小结
if-else是基础:if用于判断条件是否成立 (True),else处理不成立 (False) 的情况。末尾的冒号和代码块的缩进是语法关键。elif处理多分支:当有多个互斥条件时,使用if-elif-elif-else结构,程序按顺序判断,执行第一个满足条件的分支后即结束。- 嵌套实现复杂逻辑:可以在一个条件分支的代码块内,再嵌入完整的判断语句,实现层级化的条件判断。
- 条件求值为布尔值:
if后面的条件表达式(如比较、逻辑运算)或变量,最终都会被解释为True或False。 - 使用标志变量:像示例中的
err变量,是一种常见的控制流程技巧,用于记录某个状态并在后续判断中使用。
📋 行动清单
- 将计算器示例中的固定输入改回
input()语句,并运行测试不同的运算符。 - 在嵌套判断的示例中,尝试输入
2、10、11等数字,观察输出是否符合预期。 - 自己设计一个场景(如根据天气决定活动),用
if-elif-else结构写一段代码。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第2章代码包:判断语句(含1 个 Notebook)ZIP · 904B