关于python随机抽取各类型不重复值的思考(sample与randint的区别)
前入学教育心得体会
⾔
有道题⽬这样的:
某次考试,需从题库中抽取⼀定数量题⽬,假设题库中共有 1000 道题⽬,其中单选题 200 桂花树的作用
道,多选题 120 道,判断题 200 道,填空题 400 道,简答题 80 道,现在需要随机抽出 25 道题,请给 出较合理的数据抽样⽅法,并编程实现,要求给出源代码(需有注释),并给出⼀次抽取结果。
如果这是道数学题就很简单,算⼀下简笔画小老鼠
各个题⽬占⽐是多少再乘随机抽出题⽬的个数25就⾏
但⽤python编程实现的话就会发现很多⼩技巧在⾥⾯
先把我的代码放上来
import random
dictsum ={'躁狂抑郁性精神病
单选':200,//各个类型题⽬各有多少道题
'多选':120,
'判断':200,
'填空':400,
'简答':800}
dict={'单选':5,//每个类型题夜莺读后感
⽬需要抽出多少道题
'多选':3,
'判断':5,
'填空':10,
'简答':2}
for name,sum in d5人制足球场尺寸
ictsum.items()://循环di再见翻译
ctsum字典获取信息
print(name,':', random.sample(range(1,sum),dict[name]))
//不重复的输出五种类型题⽬
输出结果是这样
思考
⾸先看下,因为题⽬背景是要出题
隐含的意思是:题⽬不能重复
所以这个时候不光要输出五种类型值
还要做到不能重复
我的想法⼀开始是建⽴两个数组,但是python⾥没有数组
还是字典更适合些
于是就建⽴了对应的字典来存储
dic雨天简笔画
t成山头
sum对应所有题库的类型与值
dict对应的需要抽出的类型与值
为了得到题库⾥每个类型值需要对其进⾏遍历
所以写出了个for循环
sum对应这dictsum中总数⽬,即200,120、、、
name则对应dictsum中的题⽬类型,即单选,多选、、、
插⼀句
本来还想使⽤‘单选‘(dict)与’单选和’(dictsum)来区分两者但是发现这样需要写两个for循环实在太不妥当
所以投机取巧的统⼀命名
random这个⾃然不⽤多少直接随机⽣成数,别忘记加上头⽂件
⾄于为什么使⽤random.sample()⽽不使⽤random.randint()
以下截取了开发者⼿册中的函数解释
randint更倾向于随机⽣成数,随机数中可能重复也可能不重复
sample只会进⾏⽆重复随机抽样
两个使⽤⽅法还是很相近
结论
如果题⽬只是要求随机产⽣就⽤randint
如果要求不能重复就⽤sample