专栏首页快学Python用Python来抽奖?真挺简单的!

用Python来抽奖?真挺简单的!

大家好,我是小五

如果搞抽奖活动的话,经常会遇到这类问题:如何从50个人中随机抽取5个人获得奖品

如果用Python来抽取的话,一般会用到标准库中的random模块,该模块实现了各种分布的伪随机数生成器,以及和随机数相关的各种实用函数。

下文我将简单介绍random模块中的几个函数,有的可以生成随机浮点数、整数、字符串,有的可以帮你随机选择列表序列中的一个元素,打乱一组数据等。

random()

random()函数在区间 [0.0, 1.0) 内均匀生成随机浮点数,是模块中几乎所有函数的基础。

import random
random.random()

导入random模块后,调用random()函数后即可生成随机浮点数。

我们一般把待抽取的人名都放在列表中?

name_list = ['赵1','钱2','孙3','李4','周5','吴6','郑7','王8','冯9','陈0']

这时候如果能生成随机整数再利用列表索引,生成对应的随机人名不就行了嘛。那就需要使用另一个函数randint()去生成随机整数啦。

randint()

randint()随机生一个整数int类型,可以指定这个整数的范围,有上限和下限值。

name_list = ['赵1','钱2','孙3','李4','周5','吴6','郑7','王8','冯9','陈0']
random.randint(0,len(name_list)-1)
name_list[random.randint(0,len(name_list)-1)]

这里我们设置了randint随机数范围是待抽取人名的列表长度。

这样就随机抽取了一个人名,如果想一次性抽取多个人名呢?循环就好了

sample=[]
for i in range(5):
    sample.append(name_list[random.randint(0,len(name_list)-1)])
print(sample)

可以看到随机抽取的元素出现了重复,那还需要去重。

这里需要改两个地方,先将for循环改为while循环结构,判断条件为len(my_list1) < 5。然后再增加一个条件判断语句,用来防止多次生成的随机数中有重复值出现。

sample=[]
while len(sample) < 5:
    name = name_list[random.randint(0,len(name_list)-1)]
    if name not in sample:
        sample.append(name)
print(sample)

这样也就实现了“去重的效果”

choice()

实际是两个函数:choice()choices()

random.choice(seq)

从非空序列 seq 返回一个随机元素。如果 seq 为空,则引发 IndexError

random.choices(population, weights=None, *, cum_weights=None, k=1)

返回从 population 进行 k 次随机抽样结果的列表,即有重复(有放回)随机抽样。

这种办法随机抽取的元素也是可以重复的,如果想去重可以参考前文。

sample()

sample(n) 是指从序列中选择n个随机且独立的元素。

random.sample(name_list,5)

非常简单,就从列表name_list中抽取了5个不重复的数据。

shuffle()

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

random.shuffle(name_list)
print(name_list)

前文的各种函数使用时,都没有将原有序列改变。但shuffle()将原列表直接“打乱”顺序,形成一种随机的效果。

这时候通过列表切片,即可达成随机抽取的目的。

name_list[:5]

好了,本文我们讨论了random模块中随机抽取的几个函数。大家可以猜猜我平时抽奖用的是哪个函数呢?

人生苦短,快学Python

本文分享自微信公众号 - 快学Python(kxpython),作者:快快

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用Selenium来爬取数据?真挺简单的!

    于是Selenium就应运而生了,它可以算的上是自动化测试框架中的佼佼者,因为它解决了大多数用来爬取页面的模块的一个永远的痛,那就是Ajax异步加载 。今天将给...

    快学Python
  • 用python来玩好玩的之自动抽奖

    不知道你们有没有玩过无码科技的小程序抽奖助手,没有玩过的可以在微信小程序入门搜索抽奖助手,首页有很多奖品进行抽奖的,我前几天发现了之后就把那里的所有奖品都点了一...

    sergiojune
  • 项目演练 | Python制作一个圣诞抽奖程序,原来如此简单

    下周我们公司的圣诞 Party 活动安排有抽奖环节,由于不方便采用手机抽奖,且目前选用的电脑端在线抽奖会出现卡顿情况,最近我就尝试着用 Python 实现抽奖功...

    龙哥
  • Python趣味实例,实现一个简单的抽奖刮刮卡

    本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    砸漏
  • 2017 年终总结 --- 忙碌而又颇有意义的一年

    其实一早就有写年终总结的冲动,真到了写总结的时候又不知道从何开始。按理来说年终总结一般都是在年度结束的时候。好吧,我得承认,我的想法有点特殊。因为是在校学生,所...

    指点
  • 如何通过python爬虫来全自动抢微博红包?!

    作者:admin IDF实验室 http://blog.idf.cn/2015/02/programming-of-grabing-red-envelop...

    机器学习AI算法工程
  • 迟到的爬虫!!!

    先input一个题外话,最近快到期末,老师布置了作业项目,加上快要儿童节了,最最最激动的是618的预热。咳咳、、所以,时间比较仓促,但百忙之中还是把文章写出来了...

    Bess Croft
  • Golang实现一个微信抽奖小程序后台

    ​之前在学区块链,然后看到很多区块链项目都是基于golang在开发,包括以太坊的官方go-ethereum。了解了下go是google出品,很多人说其有c/c+...

    J_J
  • php简单计算权重的方法示例【适合抽奖类应用】

    在线随机数字/字符串生成工具: http://tools.zalou.cn/aideddesign/suijishu

    砸漏
  • github标星58500+:常见数据结构与算法的python实现

    http://gk.link/a/108GK ,内容挺全面,学了应该对算法有帮助。

    kbsc13
  • Python使用Tkinter实现滚动抽奖器

    接下来我就使用 Python 中的 Tkinter 模块来实现一个简单的滚动抽奖器。

    Python碎片公众号
  • AI时代就业指南:数学建模比赛经验总结(MCM/ICM)

    编者按:很多应届生都有这样的困惑,企业招聘的时候都要求有项目经验,对我们这些学生很不公平,在学校里怎么获得项目经验呢?实际上,在校学生还是有获得项目经验的机会的...

    小莹莹
  • 代码角度分析《旅行青蛙》:一

      17 年春节前,《旅行青蛙》火的不行,反应慢一拍的我最近才开始迷上这个游戏。最近我的青蛙出去旅行不知所踪好几天了,作为一个不甘心当“佛系青年”的程序员,我想...

    用户2443625
  • Python编程实战 - 笔记1

    happy123.me
  • 用CSS实现一个抽奖转盘(附详细代码+思路)

    原文:https://www.cnblogs.com/wenruo/p/9732704.html

    zz_jesse
  • Python使用Tkinter实现转盘抽奖器

    我使用 Python 中的 Tkinter 模块实现了一个简单的滚动抽奖器,接下来继续写一个简单的转盘抽奖器。

    Python碎片公众号
  • 随机机制的探索(RandomPicker中文文档)

    RandomPicker?? 最初的灵感来来自音乐随机播放: 权重++ 切歌模式

    冰之角
  • Python代码找bug(3)

    (2)语句末尾不应该加分号,这是Python的特色之一哦,看看y = 0 后面是啥?

    高一峰
  • Maven快照版本要这样用才真的香!

    今天又分享一个问题解决的故事。请看下图框起来的错误,明显就是找不到这个class嘛!

    猿天地

扫码关注云+社区

领取腾讯云代金券