跳到正文
IGCSE·Tuition
计算机科学 · 课程

测试缩进与分支结构

在 Python 里,少一个空格,就可能让一行跑出原本该在的循环。

本页内容
  1. Python 怎样判断哪些行在块里面?
  2. 例题
  3. 要提防的错误
  4. 自我检测
  5. 接下来学什么

在 Python 里,缩进就是逻辑的一部分。缩进在 if、elif、else、for 和 while 之下的行才属于它们,所以挪动一行就会改变程序的行为。

这一课接在 把算法对应成 Python 函数 之后,属于 过渡到 Python 与代码运行。

Python 怎样判断哪些行在块里面?

以冒号结尾的行会打开一个块。往下缩进一层的每一行都在块里面。第一行缩回去的就在块外面,在块结束后才运行。

对于分支,if、elif 和 else 按顺序检查,只有第一个条件为 True 的分支会运行。else 接住剩下的所有情况。

例题

任务:分数 70 或以上返回 “High”,40 到 69 返回 “Middle”,其余返回 “Low”。

def band(mark):
    if mark >= 70:
        return "High"
    elif mark >= 40:
        return "Middle"
    else:
        return "Low"

第 1 步,选边界测试值。 边缘是 70、69、40 和 39。

第 2 步,逐个追踪。

markmark >= 70mark >= 40结果
70True不检查High
69FalseTrueMiddle
40FalseTrueMiddle
39FalseFalseLow

因为第一个分支已经接住 70 及以上,elif 不需要再写“并且低于 70”。

要提防的错误

常见的失误是对本应互相排斥的选择使用分开的 if 语句。

错误答案:

def band(mark):
    result = "Low"
    if mark >= 70:
        result = "High"
    if mark >= 40:
        result = "Middle"
    return result

输入 80 时,第一个 if 设为 “High”,然后第二个 if 也是 True,把它覆盖成 “Middle”。所以 80 分返回 “Middle”。

改正的做法是把第二个 if 改成 elif,这样只有第一个条件为 False 时才会检查它。测试一个远高于最高边界的分数,例如 80,马上就能暴露这个问题。

缩进在循环里也会以同样的方式出错:

total = 0
for n in [1, 2, 3]:
    total = total + n
    print(total)

这会输出 1, 3, 6。如果把 print(total) 往回缩一层,它就在循环之后,只输出 6。

自我检测

1. check(15) 和 check(3) 分别输出什么?

def check(n):
    if n > 10:
        print("big")
    print("done")
查看答案

check(15) 先输出 big 再输出 done。check(3) 只输出 done,因为 print("done") 没有缩进在 if 之下,所以每次都会运行。

2. sign(0) 返回什么?

def sign(n):
    if n > 0:
        return "positive"
    elif n < 0:
        return "negative"
    else:
        return "zero"
查看答案

“zero”。0 > 0 是 False,0 < 0 是 False,所以执行 else。

3. 为什么 40 是测试 band 的好数值?

查看答案

它正好在 mark >= 40 的边界上。如果学生写成 > 而不是 >=,40 会返回 “Low”,错误就暴露出来了。

接下来学什么

下一课学习区分“程序崩溃”和“悄悄出错”:区分语法错误与错误结果。你可以在 Python 推理沙盒 里用自己的测试值运行 band,或者把同样的分支写成伪代码,再用 受限伪代码追踪训练器 检查。

如果分支题总是在边界上失分,可以看看我们的 线上一对一计算机科学补习。

常见问题

缩进应该用几个空格?

每次都用同样的数量,常见的习惯是四个空格。Python 只要求同一个块里的行互相对齐。在同一个块里混用制表符和空格可能引起错误,所以选定一种并保持一致。

什么时候用 elif,而不是第二个 if?

当几个选择互相排斥、只应运行其中一个分支时,用 elif。第二个 if 即使前面的分支已经运行也会被检查,所以两个分支都可能触发。对于等级分段、范围和类别,通常你要的是 elif。

什么是边界值?

边界值是条件边缘的输入,例如判断是 mark >= 40 时的 40 和 39。大多数分支错误都出现在这里,所以每个边界都要测试略低于、刚好等于和略高于的值。

更新于:

下一步

如果你的分支在边界值上给出奇怪的答案,一对一的老师可以和你一起检查测试输入,看清是哪个条件在起作用。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

已通过我们的服务帮助 9,000+ 名学生