要把算法对应成 Python,一次翻译一种结构:赋值、选择、循环、输出。逻辑完全不变,只改写法。
这是 过渡到 Python 与代码运行 的第一课,建立在 适用大纲的伪代码 的写法之上。
伪代码的每个部分怎样对应到 Python?
| 概念 | Cambridge 风格伪代码 | Python |
|---|---|---|
| 存入一个值 | Count ← 0 | count = 0 |
| 比较是否相等 | IF Mark = 50 | if mark == 50: |
| 其他比较 | >=, <=, <> | >=, <=, != |
| 计数循环 | FOR Index ← 1 TO 5 | for index in range(1, 6): |
| 遍历列表 | FOR 加 Scores[Index] | for score in scores: |
| 代码块结尾 | ENDIF, NEXT | 缩进 |
| 显示结果 | OUTPUT Count | print(count) 或 return count |
range 函数会在第二个数字之前停止。要数 1 到 5,要写 range(1, 6)。
例题
算法:数一数五个分数中有几个是 50 分或以上。
Count ← 0
FOR Index ← 1 TO 5
IF Scores[Index] >= 50 THEN
Count ← Count + 1
ENDIF
NEXT Index
OUTPUT Count
第 1 步,包进函数。 数组变成参数,函数就可以用任何列表来测试。
第 2 步,逐个结构翻译。
def count_passes(scores):
count = 0
for score in scores:
if score >= 50:
count = count + 1
return count
print(count_passes([72, 45, 50, 38, 91]))
第 3 步,用 72, 45, 50, 38, 91 追踪。
| score | score >= 50 | count 之后 |
|---|---|---|
| (开始) | 0 | |
| 72 | True | 1 |
| 45 | False | 1 |
| 50 | True | 2 |
| 38 | False | 2 |
| 91 | True | 3 |
输出是 3。注意 50 也算,因为判断用的是 >= 而不是 >。
要提防的错误
常见的失误是把伪代码的下标范围直接抄进 Python。
错误答案:
for index in range(1, len(scores)):然后用scores[index]这从位置 1 开始,但 Python 列表从位置 0 开始,所以第一个分数被跳过。用上面的列表,它只看到 45, 50, 38, 91,返回 2。
改正的做法是直接遍历数值,例如 for score in scores,这样不会漏掉也不会越界。如果需要下标,range(len(scores)) 从 0 跑到最后一个位置。一定要追踪第一项和最后一项来抓出这个错误。
自我检测
1. 写出 Total ← Total + Mark 的 Python 写法。
查看答案
total = total + mark。箭头变成 =,变量名习惯用小写。
2. 写出 IF Mark = 100 THEN 的 Python 条件。
查看答案
if mark == 100:。两个等号用来比较,这一行以冒号结尾。
3. count_passes([50, 50, 49]) 返回什么?
查看答案
2。两个 50 及格,因为 50 >= 50 是 True,而 49 不及格。
接下来学什么
下一课看缩进怎样改变程序行为:测试缩进与分支结构。你可以在 Python 推理沙盒 里试上面的函数,再和 受限伪代码追踪训练器 对照。
如果你翻译正确,却在追踪时失分,我们的 线上一对一计算机科学补习 可以针对这个习惯来练。