如何用Python从谜语列表中返回用户指定数量的随机谜语
Python简易谜语游戏优化方案
现存问题梳理
- 输入处理错误:将用户输入的答题数量转为字符串类型,for循环遍历字符串会按单个字符迭代,比如输入
3仅循环1次、输入12会循环2次,完全不符合需求;且没有做输入合法性校验,用户输入非数字、超过8或者小于1的数值时程序会报错或逻辑异常 - 答案匹配逻辑bug:将用户输入的答案转成了小写,但判断条件里的正确答案都是首字母大写的格式,即使用户输入正确也会被判错
- 谜语重复问题:使用
random.choice随机选取谜语,可能出现同一道题多次出现的情况 - 代码冗余:谜语和答案分开存储,大量重复的
elif判断逻辑,后续新增/修改谜语时维护成本极高
优化后代码
import random # 用字典存储谜语和对应答案,后续修改新增直接改这个字典即可 riddle_dict = { '如果一架飞机刚好坠毁在美国和加拿大的边境上,幸存者应该被埋在哪里?': '你不需要埋葬幸存者', '橙子休息的时候会做什么?': '浓缩', '一个牛仔周五骑马进镇,待了三天后还是周五离开,这是怎么回事?': '他的马名字叫周五', '什么东西你一说出它的名字它就消失了?': '沉默', '哪种浆果会发出刺耳的噪音?': '树莓', '怎么区分男雪人和女雪人?': '看雪球', '你向南走一英里,向东走一英里,再向北走一英里,最后回到了起点,你在哪里?': '北极', '什么东西连接两个人但只碰到其中一个?': '婚戒' } # 输入合法性校验 while True: try: riddles_wanted = int(input("你想要答多少道谜语?(最多8道):")) if 1 <= riddles_wanted <= 8: break else: print("请输入1到8之间的数字") except ValueError: print("输入无效,请输入数字") # 随机抽取指定数量的不重复谜语 selected_riddles = random.sample(list(riddle_dict.items()), k=riddles_wanted) correct_count = 0 # 答题循环 for riddle, correct_answer in selected_riddles: user_answer = input(riddle).strip() if user_answer == correct_answer: print("答对啦!") correct_count += 1 else: print(f"答错啦,正确答案是:{correct_answer}") # 最终得分统计 print(f"答题结束,你一共答对了{correct_count}道题,得分率:{correct_count/riddles_wanted*100:.1f}%")
核心优化点
- 用字典绑定谜语和正确答案,后续维护只需要修改字典内容,不需要调整判断逻辑
- 增加输入校验逻辑,避免非法输入导致程序崩溃
- 用
random.sample抽取不重复谜语,不会出现重复出题的问题 - 去掉冗余的多分支判断,简化答案匹配逻辑
- 新增最终得分统计,提升游戏完整性
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

