- 三大控制结构:
- 顺序结构:代码从上到下,自左而右的顺序执行;
- 分支结构:当程序执行到控制分支的语句时,首先判断条件,根据条件表达式的值选择相应的语句执行;
- 循环结构:当程序执行到循环控制语句时,根据循环判定条件对一组语句重复执行多次。
- 顺序结构: 顺序结构是程序中最基本的控制结构,指程序按照代码的先后顺序,从上到下、从左到右依次执行每一条语句。
- 没有条件判断和跳转,所有语句都会被依次执行。
- 是所有程序的基础,其他结构(如分支、循环)也常包含顺序结构。
a = 1
b = 2
c = a + b
print(c)
上述代码会依次执行每一行,最终输出 3
。
- for循环: for 循环是一种用于已知重复次数或可迭代对象的循环结构,适合遍历序列、集合等。
- 常用于:需要对每个元素、每个数字、每个对象依次操作的场景。
- 循环次数通常是确定的。
for 变量 in 可迭代对象:
# 循环体
要重复执行的语句
示例:
for i in range(5):
print(i)
上述代码会输出0到4,共5次。每次循环,变量 i
依次取值。
区别: for 循环适合已知次数或遍历对象,while 循环适合次数不确定、依赖条件的重复。
- 循环的前置条件与后置条件:编写循环时最复杂的地方之一,就是你需要确保循环结束时世界的状态(后置条件)能够满足下一次循环开始时的要求(前置条件)。
- 前置条件:在每次循环前先判断条件,只有条件为真才会执行循环体;
- 后者条件:先执行一次循环体,然后判断条件,条件为真则继续循环。
- 嵌套循环: 嵌套循环是指在一个循环体内再包含另一个循环。常用于处理二维结构(如棋盘、表格等),可以让程序对每一行的每一列都进行操作。
- 外层循环控制行,内层循环控制列。
- 常见应用:遍历二维数组、绘制图形、处理网格等。
for i in range(3):
# 外层循环,控制行
for j in range(4):
# 内层循环,控制列
print(i, j)
上述代码会输出所有行列组合(共3×4=12次),即遍历一个3行4列的表格。
- while循环: while 循环是一种基于条件判断的循环结构,适用于循环次数不确定、需要根据某个条件反复执行的场景。
- 每次循环前先判断条件,条件为真则执行循环体,否则结束循环。
- 常用于:直到满足某个条件才停止的任务,如遇到障碍、收集完所有物品等。
while 条件:
# 循环体
要重复执行的语句
示例:
count = 0
while count < 5:
print(count)
count += 1
上述代码会输出0到4,共5次。只要条件 count < 5
成立,就会继续循环。
区别: for 循环适合已知次数的重复,while 循环适合次数不确定、依赖条件的重复。
- 栅栏柱错误: 栅栏柱错误(Fencepost Error),也叫“边界错误”或“off-by-one error”,是指在循环或计数时多算或少算了一次,常见于处理区间、数组下标等场景。
- 常见原因:循环次数写错、区间端点包含/不包含混淆。
- 例如:要在两端插柱子,柱子数比栅栏段数多1。
# 例:打印1到10的所有整数
for i in range(1,10):
print(i)
# 实际只输出1到9,漏掉了10
避免方法:明确循环的起止条件,理解 range
的左闭右开特性,必要时多画图或举例验证。
- 条件语句: 条件语句用于根据不同的条件执行不同的代码分支,是实现程序逻辑判断的基础。
- 常用关键字:if、elif、else
- 根据条件表达式的真假,选择性地执行某些语句。
if 条件1:
# 条件1为真时执行
elif 条件2:
# 条件2为真时执行
else :
# 以上条件都不满足时执行
示例:
score = 85
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
else:
print("不及格")
上述代码会根据分数输出不同的评价,实现了分支选择。
- match语句: match 语句是 Python 3.10 及以上版本引入的结构化模式匹配语句,类似于其他语言的 switch/case,但功能更强大。
- 可以根据变量的不同值或结构,选择性地执行不同的代码块。
- 支持对复杂数据结构(如元组、列表、字典等)进行模式匹配。
match 变量:
case 值1:
# 变量等于值1时执行
case 值2:
# 变量等于值2时执行
case _:
# 其他情况
示例:
command = "start"
match command:
case "start":
print("启动程序")
case "stop":
print("停止程序")
case _:
print("未知命令")
上述代码会根据 command
的值输出不同内容,实现了多分支选择。
Karel编程中我们只使用if/else语句。
作业2:修复拱桥