刷题
“Comment-Driven Development”(注释驱动开发)
methods(4 steps):
1. 读题,圈出 输入什么?输出什么?有哪些规则?
2. 拆解 把大问题拆成 5~8 个小步骤,每步一句话
3. 写注释 把小步骤逐条写成注释
4.逐条实现 对着每条注释写代码,写完一条划掉一条
关键在第 ② 步:拆到「一句话就能说清」的程度。如果某一步你想写成两句,说明它还能再拆。
demonstrate:


① 读题:圈出关键信息
读的时候拿笔(或在纸上)列出来:
输入
- 第 1 行:N(字典有几个词)
- 接下来 N 行:每行 A B —— A 语言词 → B 语言词
- 最后 1 行:文章 S
输出
- 翻译后的文章(一行)
规则
- 文章里的单词 → 查字典替换
- 字典里没有的单词 → 换成 UNK
- 标点 → 原样保留
② 拆解 —— 这一步最关键
大问题:「把 S 翻译一遍」
你不能一上来就想「怎么翻译」,要先问:S 是一整串字符,我怎么知道哪几个字符是一个单词?
这就是这道题的核心难点。拆解如下:
- 先把字典建好 ← 不然没法查
- 一个字符一个字符地看 S
- 遇到字母 → 攒起来 ← 因为一个单词有好几个字母
- 遇到标点 → 说明一个单词结束了
→ 先把攒的单词翻译掉
→ 再输出这个标点 - 文章遍历完 → 别忘了最后可能还剩一个单词没处理
第 5 步是最容易漏的。 你在写注释的时候就能想到它,但要是直接写代码,八成会漏,然后样例 3 过不了。
③ 把上面的拆解写成注释
1 | # 1. 读入 N |
这份注释就是你的「施工图」。 下一步只是把它翻译成 Python 而已。
- 我自己写的
1 | #读入数据 |
学到的
- 字典的小语法:
1 | # 1. 建一个空字典 |
- pass的作用:占行用的

- a, b = input().split():
1 | 拆成三行 |
- 解包:
1 | 1. 普通解包(数量刚好对上)— 不用 * |
- python中有更直接方便的便利方式:for 后面跟的可以是任何能逐个取元素的东西——字符串、列表、元组、字典、文件,甚至 range() 产生的数字序列。range(len(text)) 只是其中一种,而且是最不 Python 的一种。

- Python 里 if 后面不一定非要写比较式,任何值都能直接判断「真/假」:
1 | if word: |
- ans.append(dic.get(word, “UNK”))
函数 vs 方法
1 | 你之前用的这些叫函数(function)——直接写名字就能调用: |
- 查方法:
1 | 方式一:Python 交互环境(最直接) |
不太重要了解即可
''.join(ans)
‘’ —— 一个空字符串,它在这里的角色是分隔符
.join(ans) —— 字符串自带的方法,意思是「用我这个字符串,把 ans 里的元素一个个连起来」
1 | 假设前面扫描完,ans 是这样的: |
为什么写成 ''.join(ans) 而不是 ans.join('')
因为 join 是「字符串」的方法,不是「列表」的方法
‘分隔符’.join(列表) # ✅ 正确:字符串在前面
列表.join(‘分隔符’) # ❌ 报错:列表没有 join 方法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 星落!





