如何用Python实现州首府多项选择题测验的选项生成功能?
解决州首府选择题选项生成问题
嘿,我懂你卡在生成4个选项(1个正确+3个错误)的环节了!其实核心就是两步:先锁定正确答案,再挑出3个不重复的错误选项,最后打乱顺序做成规整的选择题格式。我帮你把代码改好,直接就能用:
import random # 这里替换成你自己的州首府字典就行 state_capitals = { "Texas": "Austin", "California": "Sacramento", "New York": "Albany", "Florida": "Tallahassee", "Illinois": "Springfield", # 剩下的州和首府... } file = open(r'''C:\Users\Leo\Desktop\Quiz1CSL.txt''',"w") file.write("Austin's Computer Science State Capitals Quiz\n") # 生成10道完整题目 for question_num in range(1, 11): # 随机选一个州作为题目主体 random_state = random.choice(list(state_capitals.keys())) correct_capital = state_capitals[random_state] # 生成3个不重复的错误首府:先排除正确答案,再随机选3个 all_capitals = list(state_capitals.values()) wrong_candidates = [cap for cap in all_capitals if cap != correct_capital] selected_wrong = random.sample(wrong_candidates, 3) # 合并正确选项和错误选项,打乱顺序 options = selected_wrong + [correct_capital] random.shuffle(options) # 写入题目内容 file.write(f"\nQuestion {question_num}: What is the capital of {random_state}?\n") # 写入A/B/C/D格式的选项 for idx, option in enumerate(options, start=65): # 65对应ASCII码的A file.write(f" {chr(idx)}. {option}\n") file.close()
关键逻辑拆解:
- 错误选项去重:用
random.sample()而非random.choice()循环选,能直接保证3个错误选项不重复,也不会选到正确答案。 - 选项随机排序:把正确选项混进错误选项后打乱,确保正确答案的位置每次都不一样,避免固定位置暴露答案。
- 题目编号优化:把循环改成从1到10,给每个题目加上编号,测验格式更规范。
如果想加答案方便批改,还可以在循环里记录每个题的正确选项,最后写入文件末尾:
# 在循环前先定义一个存答案的列表 answers = [] # 每个题生成后加一行记录答案 answers.append(f"Question {question_num}: {chr(options.index(correct_capital)+65)}") # 写完所有题目后写入答案区 file.write("\n--- Answer Key ---\n") for ans in answers: file.write(f"{ans}\n")
内容的提问来源于stack exchange,提问作者leo_someone
相关产品推荐
相关产品推荐

