用字典定义问卷结构、CSV保存数据、原生字典做统计可避开数据存不住、选项难扩展、统计脆弱三大坑。

直接用 input() 和字典就能跑起来,但真要收几十份数据、加点统计功能,得绕开三个坑:数据存不住、选项写死难扩展、统计代码重复又脆弱。
问卷结构用字典定义,别硬编码问题顺序
很多人一上来就写一堆 print() 和 input(),结果加个新问题就要改五六处。把问卷拆成结构化字典,问题 ID、题干、类型(单选/填空)、选项(如有)全在里面,后续增删题、跳题、导出都靠它驱动。
questions = {"q1": {"text": "您常用编程语言?", "type": "choice", "options": ["Python", "JavaScript", "Go"]}, "q2": {"text": "每天写代码时长?", "type": "text"}}- 遍历字典生成问卷,用户答完也按相同 key 存进答卷字典,比如
response["q1"] = "Python" - 别把选项写成字符串拼接(如
"A. Python B. JS"),否则后续统计得再切分——选项必须是独立列表,方便直接匹配计数
用 CSV 保存数据,别用 txt 或 pickle
pickle 虽然方便,但换环境或升级 Python 版本后可能打不开;纯文本 .txt 没结构,后期想用 Excel 或 Pandas 分析就得重写解析逻辑。CSV 是最轻量又通用的选择,Excel、SQL、pandas.read_csv() 全能直接读。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 每次提交调用
csv.DictWriter追加一行,字段名用问卷的 key(["q1", "q2", "timestamp"]),值就是用户答案 - 首次写入前检查文件是否存在,不存在就写 header 行;存在就跳过 header,只追加数据
- 时间戳用
datetime.now().isoformat(),不是time.time()——后者是数字,Excel 打开不识别为日期
统计用字典计数,别依赖 pandas(新手先绕开)
新手一查“Python 统计”就看到 pandas.value_counts(),但装包、读 CSV、处理 NaN、列名大小写……中间任一环节出错都会卡住。用原生字典做频次统计,三行代码搞定单选题,逻辑透明,调试直观。
立即学习“Python免费学习笔记(深入)”;
counts = {}
for row in csv.DictReader(open("survey.csv")):
answer = row["q1"]
counts[answer] = counts.get(answer, 0) + 1
# 结果:{"Python": 24, "JavaScript": 17, "Go": 9}
- 填空题统计词频?先
row["q2"].strip().lower()清洗空格和大小写,再用collections.Counter或手动拆词 - 想算平均时长?得先判断
row["q2"]是否为数字字符串,非数字(如“不写代码”)直接跳过,别让int()报错中断整个统计 - 所有统计逻辑封装成函数,比如
def count_choice(field_name):,避免每次复制粘贴循环
真正麻烦的不是写问卷,而是用户乱填:选项外的文本、空提交、重复提交。校验逻辑要提前埋好——比如单选题答案不在预设 options 列表里,就提示“请从上方选项中选择”,而不是默默存个脏数据。后面加导出图表、Web 界面,全靠干净的数据结构撑着。

















