Python如何从列表选取随机函数实现百万富翁类答题游戏随机出题功能?
随机出题功能实现方案
前提假设
先给出通用题库结构示例,你可以根据自己实际定义的字段调整代码:
# 示例题库结构 question_bank = [ { "question": "1+1等于几?", "options": ["1", "2", "3", "4"], "correct_answer": "2", "bonus_level": 1 }, { "question": "Python的发明者是谁?", "options": ["吉多·范罗苏姆", "林纳斯·托瓦兹", "詹姆斯·高斯林", "比尔·盖茨"], "correct_answer": "吉多·范罗苏姆", "bonus_level": 3 }, # 其余题目省略 ]
三种可行实现方案(对应你尝试过的方法的正确用法)
方案1:用random.choice实现单次随机抽题
适合灵活单题抽取的场景,是最常用的抽题实现:
import random def get_random_question(question_bank): if not question_bank: return None # 题库为空时返回空值 return random.choice(question_bank)
如果需要避免重复出题,每次抽题后把对应题目从原题库中移除即可:
selected_question = random.choice(question_bank) question_bank.remove(selected_question)
方案2:用random.shuffle实现全题库乱序顺序出题
适合需要按顺序出完所有题、全程不重复的场景,注意random.shuffle是直接修改原列表,没有返回值,不要用变量接收它的返回结果:
import random # 直接打乱原题库顺序 random.shuffle(question_bank) # 按顺序遍历乱序后的题库即可实现不重复随机出题 for question in question_bank: # 此处执行你的游戏校验逻辑 print(question["question"])
方案3:用random.choices实现按奖金档位权重抽题
适合需要控制不同难度/奖金档位题目抽中概率的场景,注意random.choices返回的是列表,取单个元素需要加索引:
import random # 示例规则:奖金档位越低,抽中概率越高,可根据你的需求调整权重规则 weights = [5 if q["bonus_level"] ==1 else 3 if q["bonus_level"] ==2 else 1 for q in question_bank] # k参数指定抽取题量,返回长度为k的列表 selected_question = random.choices(question_bank, weights=weights, k=1)[0]
常见调用失败排查点
- 调用random相关方法前必须先导入模块:
import random - 所有random列表操作方法仅支持非空列表入参,调用前先判断题库是否为空
- 不要用变量接收
random.shuffle的返回值,它会直接修改原列表 - 从
random.choices的返回结果中取单题时,必须加[0]索引
内容的提问来源于stack exchange,提问作者juan camilo
相关产品推荐
相关产品推荐

