PYTHON LESSON 010
考点精讲:条件与循环进阶
把条件写准(含边界)、把循环写稳(起点、条件、变化),掌握“循环套分支”这一考级核心结构。
00 · 学习目标
这一课要解决什么?
学完后,你应该能够
- and / or 组合多个条件
- >= 与 > 的边界差别
- while 三要素:起点、条件、变化
01 · 核心概念
条件组合、边界判断与循环三要素
结构化程序由顺序、分支和循环组合而成。循环内的分支在每一轮独立判断;边界条件和状态更新共同决定程序处理哪些数据、执行多少次。
结构组合循环不变量边界条件状态追踪终止性GESP Python 1 级 · 分支结构GESP Python 1 级 · 循环结构GESP Python 1 级 · 逻辑运算一级以单层结构及其组合为主;多层分支和多层循环是二级核心。
02 · 语法与规则
先记住这 3 条,再开始写程序
and / or 组合多个条件先准确读出这条写法的结构与作用。
>= 与 > 的边界差别换一组最小数据,手工推演一次结果。
while 三要素:起点、条件、变化再用边界值或反例确认它的适用条件。
03 · 完整实例
代码、运行结果和解释放在一起看
# 拍手游戏:1 到 15,逢 3 的倍数喊“啪”
for n in range(1, 16):
if n % 3 == 0:
print(n, ":啪!")
else:
print(n, ":过")
print("——————")
# 边界测试:60 分到底算不算及格?
for score in range(59, 62):
if score >= 60:
print(score, "分:及格")
else:
print(score, "分:不及格")
print("——————")
# 火箭发射倒计时(while 三要素:起点、条件、变化)
t = 5
while t > 0:
print(t)
t = t - 1
print("发射!")1 :过 2 :过 3 :啪! 4 :过 5 :过 6 :啪! 7 :过 8 :过 9 :啪! 10 :过 11 :过 12 :啪! 13 :过 14 :过 15 :啪! —————— 59 分:不及格 60 分:及格 61 分:及格 —————— 5 4 3 2 1 发射!
for 循环里套 if 是考级主力结构;while 要备齐起点、条件、变化三要素。
04 · 逐步理解
每一步只解决一个问题
- 01
条件是能回答是/否的式子
if 后面跟的条件,本质是一个只会回答“成立 / 不成立”的式子。n % 3 == 0 在 n 是 3 的倍数时成立,否则不成立。写条件前先问自己:这个式子到底在什么情况下成立?
n % 3 == 0 - 02
边界:>= 和 > 只差一分
“60 分及格”到底含不含 60?含,就要写 score >= 60;写成 score > 60,60 分的同学就被冤枉了。考级读题时把“以上”“以内”“不超过”“至少”这些词圈出来,它们全是边界信号。
if score >= 60: print("及格") - 03
and 与 or 组合条件
“8 到 12 岁”其实是两个条件:age >= 8 并且 age <= 12,用 and 连起来;or 则是“满足一个就行”。组合条件变长时可以用括号分组,让计算机和你都不迷糊。
if age >= 8 and age <= 12: - 04
循环套分支:每轮判断一次
拍手游戏的核心结构是 for 里面放 if:每数一个数,就判断一次是不是 3 的倍数。这个“循环里做判断”的结构是考级编程题的绝对主力,达标统计、奇偶分类都靠它。
for n in range(1, 16): if n % 3 == 0: print(n, "啪!") - 05
while 三要素与死循环防线
while 循环要写对三件事:起点(t = 5)、条件(t > 0)、变化(t = t - 1)。漏掉“变化”,条件永远成立,程序就停不下来了。写完 while 先检查这三件,一个都不能少。
t = 5 while t > 0: print(t) t = t - 1 - 06
预测—运行—核对
看到一段循环代码,先在纸上写出你预测的输出,再运行核对:拍手游戏哪几个数喊“啪”?倒计时打印几行?这个习惯就是考级“程序阅读题”的满分法宝。
05 · 练习与检验
自己写出来,才算真正学会
- 1运行拍手游戏,核对哪些数喊“啪”
- 2把倍数从 3 改成 4 再运行
- 3把及格线换成 70 观察边界变化
- 4让倒计时从 10 开始发射
06 · 完整知识
继续理解定义、规则和适用边界
第一次学习先完成上面的六个步骤;需要查定义、核对规则、分析误区或理解“为什么”时,再展开对应知识章。
Python 基础条件、循环与程序流程准确理解 if、for、while、range、break、continue 和循环嵌套,而不是背代码模板。+
正式定义
控制流决定下一条要执行的语句。分支依据布尔条件选择路径;循环在满足规则时重复执行代码块。Python 用冒号和缩进界定代码块。
必须掌握
- if/elif/else 从上到下判断,只执行第一个为真的分支;else 不写条件。
- for 依次取得可迭代对象中的元素;range(start, stop, step) 包含 start、不包含 stop,step 不能为 0。
- while 在每轮开始前检查条件;循环体必须让状态向终止条件推进。
- break 结束最内层循环,continue 跳过本轮剩余语句,循环的 else 仅在没有被 break 终止时执行。
- 嵌套循环的总执行次数通常需要把各层次数相乘;内层 break 不会结束外层循环。
- 边界测试至少覆盖空范围、单个元素、第一项命中、最后一项命中和始终不命中。
常见误区
- range 的右端点多算或少算一次
- while 忘记更新状态造成死循环
- 把两个互斥条件写成两个独立 if
- 误以为 break 会跳出所有嵌套循环
适用边界
- 流程图是算法的表示方法,不是 Python 语法。
- 递归也能表达重复,但有调用开销和递归深度限制,不能无条件代替循环。
Python 基础运算符、表达式与优先级完整区分算术、比较、逻辑、成员、身份和位运算,并用优先级表消除歧义。+
正式定义
表达式求值得到一个值。运算符规定如何组合操作数;当一个表达式含多个运算符时,优先级和结合方向决定求值顺序,括号可以明确改变顺序。
必须掌握
- / 总是得到浮点结果;// 是向负无穷方向取整的整除;% 与 // 满足 a == (a // b) * b + a % b。
- 比较可以链式书写,如 0 <= x < 10;and/or 会短路并返回最后求值的操作数,不一定返回 bool。
- == 比较值是否相等,is 比较是否为同一个对象;判断 None 应写 is None。
- in/not in 做成员测试;对 dict 测试的是键。
- 位运算作用于整数的二进制位;负整数按无限长二进制补码语义理解。
- 复杂表达式即使能靠优先级正确运行,也应使用括号表达意图。
常见误区
- 把 // 当成简单截断
- 用 is 比较数字或字符串的值
- 忘记 and 的优先级高于 or
- 连续位移、比较和逻辑运算却不加括号
适用边界
- 浮点数比较受二进制表示误差影响,需要按问题选择容差。
- 运算符可由自定义类重载,因此相同符号对不同类型可能有不同语义。
程序组织类、对象、属性与方法理解对象模型和封装边界,用类表达有状态的实体,而不是把所有程序都强行改成类。+
正式定义
类描述一类对象的数据与行为;实例是类创建的具体对象。实例方法的第一个参数通常命名为 self,用来访问当前实例;__init__ 在实例创建后负责初始化状态。
必须掌握
- 实例属性通常在 __init__ 中通过 self.name = value 建立。
- 实例方法通过 object.method() 调用;Python 会自动把实例绑定给 self。
- 类属性由实例共享,实例属性属于单个对象;同名实例属性会遮蔽类属性。
- __repr__ 面向开发与调试,__str__ 面向用户显示;特殊方法应遵守其协议。
- 继承表达“是一种”关系,组合表达“拥有一个”关系;能用组合清晰表达时不要滥用继承。
- 对象相等默认仍是身份比较;需要按内容相等时要定义相应协议。
常见误区
- 在方法中漏写 self
- 把每个实例独有的可变数据写成类属性
- 只为包装几个无状态函数而建类
- 继承层次过深导致行为难以追踪
适用边界
- 课程使用普通类解释对象模型;dataclass、property、抽象基类和元类是后续工程工具。
- 算法题常用函数和基本容器更直接,不要求为了“面向对象”而增加结构。
完整速查Python 关键字、内置名称与语法速查集中查阅 Python 3.12 的 35 个硬关键字、4 个软关键字和课程常用内置函数,避免知识碎片化。+
正式定义
关键字是 Python 语法保留的词,不能作为普通标识符;软关键字只在特定语法位置有特殊含义。内置名称由 builtins 模块提供,可以直接使用,但仍可能被同名变量遮蔽。
必须掌握
- Python 3.12 有 35 个硬关键字;False、None、True 首字母大写。
- match、case、_、type 是软关键字,只在对应模式匹配或类型参数语法环境中特殊。
- 内置函数无需 import,但不要把变量命名为 list、str、sum、max、input 等。
- help(name) 查看运行时帮助,dir(object) 查看可用名称,type(object) 查看类型。
- 内置异常类也是内置名称;捕获异常时应使用具体异常类型。
- 本站课程运行基线是 Python 3.12,跨版本新增语法必须先核对目标运行环境。
常见误区
- 把内置名称误称为关键字
- 用 list = [] 遮蔽 list()
- 照搬其他 Python 版本的关键字表
- 见到陌生函数名就假定无需导入
适用边界
- 本页完整列出语言关键字,并列出课程实际依赖的内置函数;Python 的全部内置异常类和对象协议应按具体错误与主题查阅。
- 第三方库 API 不属于 Python 语言本身,也不属于内置名称。
完成检查