综合练习:单词卡片本
这是什么:用 PyCharm 从零做一个真实小项目——单词卡片本(命令行):加 收录生词、考 随机抽卡片,走完「建项目 → 写 → 调 → 格式化 → 提交」的日常全流程。
为什么用:前六章的招式(解释器、补全、断点、集成工具)单练都懂,串成流水线才算会。以后学 Flask、FastAPI,每天就在这条流水线上重复。
如何用:全程在 PyCharm 里完成,每一步都用前六章的招式。
任务:单词卡片本
运行在终端的小工具,最终效果:
(.venv) PS E:\code\vocab> python cards.py 加 cherry 樱桃
已收录:cherry → 樱桃
(.venv) PS E:\code\vocab> python cards.py 考
抽到:cherry → 樱桃
流程七步
① 建项目
欢迎页 New Project:位置填 E:\code\vocab,解释器类型保持 Virtualenv → 创建。右下角出现 Python 3.x (vocab),.venv 自动建好——第 3 章的心智,一步到位。
② 写代码
项目里新建 cards.py,输入 main 按 Tab 起手,再写主体(感受补全帮你打字):
import json
import random
import sys
from pathlib import Path
STORE = Path(__file__).parent / "cards.json"
def load() -> dict[str, str]:
if STORE.exists():
return json.loads(STORE.read_text(encoding="utf-8"))
return {}
def add(word: str, meaning: str) -> str:
cards = load()
cards[word] = meaning
STORE.write_text(json.dumps(cards, ensure_ascii=False, indent=2), encoding="utf-8")
return f"已收录:{word} → {meaning}"
def quiz() -> str:
cards = load()
word = random.choice(cards)
return f"抽到:{word} → {cards[word]}"
def main() -> None:
if len(sys.argv) >= 3 and sys.argv[1] == "加":
print(add(sys.argv[2], sys.argv[3]))
elif len(sys.argv) == 2 and sys.argv[1] == "考":
print(quiz())
else:
print("用法:python cards.py 加 <单词> <释义> 或 python cards.py 考")
if __name__ == "__main__":
main()
注意:quiz() 里故意埋了个 bug(random.choice(cards)),下一步用调试器抓它。
③ 先跑「加」
内置终端(Alt+F12)里:
python cards.py 加 cherry 樱桃
python cards.py 加 commit 提交存档
已收录:cherry → 樱桃
已收录:commit → 提交存档
项目根目录多了 cards.json——数据落盘,重启不丢(呼应 JSON 教程)。
④ 调试抓 bug
python cards.py 考
程序崩溃,最后一句是 KeyError: 0。别肉眼读代码,按第 5 章四步来:
- 在
word = random.choice(cards)行打断点 - 右上角配置下拉 → 编辑配置 → 形参填
考→Shift+F9启动调试 - 变量区:
cards是字典{'cherry': '樱桃', ...} Alt+F8现场试:random.choice(cards)报KeyError: 0——choice要的是序列,字典却按0取值
修复:改成 random.choice(list(cards))(先取键列表)。再跑 考,随机出卡片,bug 拿下。
⑤ 格式化与检查
Ctrl+Alt+L 全文件格式化;扫一眼有没有淡黄提示(可简化写法)与红线——有红线立即 Alt+Enter。
⑥ git 提交
Ctrl+K 打开提交窗 → 全选 → 信息写「初版:单词卡片本(加词/抽查)」→ 提交。第 6 章的流程,独立完成。
⑦ 扩展挑战(选做)
- 加
列命令:打印全部卡片(练循环与格式化输出) 考时先只显示单词,回车后再显示释义(用input()停顿)- 释义支持多义:一个词对应一个列表——练列表与字典组合
逐段精讲(核心点)
STORE = Path(__file__).parent / "cards.json":数据文件固定放在脚本旁边,pathlib拼路径跨平台(Windows / macOS 都对)json.dumps(..., ensure_ascii=False):不加它中文会变成\u6a31\u6843——存中文必带sys.argv:python cards.py 加 cherry 樱桃→["cards.py", "加", "cherry", "樱桃"],第 0 个是文件名(同 VSCode 练习的记账本)random.choice(list(cards)):dict 转 list 得到键列表,choice从中随机取一个
学完这章去哪
你已有完整流水线:PyCharm(写/调)→ venv(环境)→ git(存档)。接下来: