栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 学术 > 人文期刊 > 电脑报

Python五种“随机抽奖”方法

电脑报 更新时间: 发布时间: 学术归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python五种“随机抽奖”方法

牟晓东

“随机抽奖”例题:假设要从10000个人中随机抽取出10人作为“中奖者”,每人对应一个0-9999中的整数,要求使用Python编程按从小到大的顺序输出中奖者数字代号。类似的“随机抽奖”程序一般均需要先导入random(随机)模块,然后借助其中的randint()、shuffle()和sample()等函数进行随机数的选取,最后使用列表或集合对数据进行存储、排序和输出。法1:randint()生成随机整数后进行in成员运算判断

首先,通过“import random”导入random模块(下同);接着,建立空列表“my_list1 = []”;建立while循环结构,判断条件为“len(my_list1) <= 10”,即列表my_list1中元素的个数达到10为止(通过len()检测列表的长度);在循环体中,第一条语句为“x = random.randint(0,9999)”,变量x取值为0-9999中的随机某个整数(包括0和9999);条件判断语句“if x not in my_list1”的作用是,查看生成的随机数x是否在列表my_list1中,防止多次生成的随机数中有重复值出现;如果不重复,则使用append()方法将x追加到列表my_list1中:“my_list1.append(x)”;当循环结束时,列表my_list1中就会保存有10个0-9999间的不重复数据。最后,通过sorted()函数对列表my_list1进行默认参数排序(升序):“my_list2 = sorted(my_list1)”,得到的列表my_list2就是从小到大顺序中奖号码,再使用print()输出结果即可。

运行程序,得到了10个“中奖”号码(如图1)。

法2:randint()生成随机整数后存入集合“去重”

与法1类似,只不过是使用集合而非列表来存储生成的随机数:“my_set = set()”,建立一个空集合;接着,仍然是在while循环中,通过randint生成0-9999间的某随机数,将它追加到集合my_set中。由于集合中的元素是不可能存在重复数据的,因此不必像法1中的列表元素进行in成员运算判断,相当于直接进行了“去重”操作。循环结束后,仍然是使用sorted()函数进行排序并保存至列表my_list中,进行print打印输出(如图2)。

法3:shuffle()随机排序后进行“切片”

首先建立列表my_list1,其值为“list(range(10000))”,通过list()将0至9999共10000个数据保存至列表my_list1中;接着使用random中的shuffle(),将列表my_list1中的数据进行随机排序:“random.shuffle(my_list1)”;然后对列表my_list1进行切片操作,任意截取出10个数据,比如“my_list1[:10]”是指从索引的第0个切至第9个(当然也可以使用“my_list2 = my_list1[99:109]”,意思是从第99个切至第109个),将它们存入列表my_list2中;仍然是使用sorted()函数进行排序并保存至第3个列表my_list3中,进行print打印输出(如图3)。

法4:sample()随机多个“取样”

Random中的sample()功能是从序列中随机多个“取样”。首先建立列表my_list1,其值为从0-9999中随机抽取10个不重复的数据:“my_list1 = random.sample(range(10000),10)”;然后就可以使用sorted()函数进行排序,将结果保存至列表my_list2中,最后进行print打印输出(如图4)。

法5:numpy中的random.choice()随机项提取

numpy中有个random.choice(),可以随机从指定列表中提取若干个元素。首先,通过“import numpy as np”导入numpy;接着建立列表my_list1,存储的数据是0-9999共10000个数据:“my_list1 = list(range(10000))”;建立列表my_list2,值为从列表my_list1中随机提取10个不重复的数据:“my_list2 = np.random.choice(my_list1,10,replace=False)”,其中的参数“replace=False”即为控制随机数“不重复”。最后,使用sorted()函数进行排序并保存至第3个列表my_list3中,进行print打印输出即可(如图5)。

小结:抽奖就是获取不重复的随机数的问题,要解决这个问题Python有多种函数和算法可以選择,体会其中的区别后你可以合理运用在其他实际应用中。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/xueshu/246423.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号