You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 01:21:01