首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python彩票建议

问python彩票建议
EN

Stack Overflow用户
提问于 2009-12-23 11:30:22
回答 5查看 1.6K关注 0票数 0

我知道python提供了随机模块来做一些简单的抽奖。假设random.shuffle()是一个很好的函数。

然而,我想构建我自己的一个简单的。我应该调查什么?彩票背后有什么特殊的数学原理吗?

比方说,最简单的情况。100个名字,随机生成20个名字。

我不想使用shuffle,因为我想自己学习构建一个。

我需要一些建议才能开始。谢谢。

EN

回答 5

Stack Overflow用户

发布于 2009-12-23 12:01:00

你可以生成你自己的伪随机数--这背后有大量的理论依据,比如从here开始--当然你无法与Python的random "Mersenne twister“(我指给你的大维基百科页面的中途解释)竞争,无论是质量还是速度,但为了理解的目的,这是一项很好的努力。或者,您可以获得物理随机数,例如来自Linux机器上的/dev/random或/dev/urandom (Windows机器也有自己的接口) --一个具有更强的物理随机性,另一个具有更好的性能。

一旦您有了(或从random;-借用)一个伪随机(或真正随机)数字生成器,从100个项目中随机挑选20个项目仍然是一个有趣的问题。虽然混洗是一种更通用的方法,但更容易理解的方法可能是,假设您的myrand(N)函数返回一个包含0和排除N之间的随机或伪随机整数:

代码语言:javascript
复制
def pickfromlist(howmany, thelist):
  result = []
  listcopy = list(thelist)
  while listcopy and len(result) < howmany:
    i = myrand(len(listcopy))
    result.append(listcopy.pop(i))
  return result

绝对不是最有效的,但是,我希望是最清楚的!-)换句话说:只要需要和可行,从剩余的项目中随机选择一个(辅助列表listcopy在任何步骤给我们“剩余的项目”,并被.pop修改而不改变输入参数thelist,因为它是一个浅拷贝)。

票数 4
EN

Stack Overflow用户

发布于 2009-12-23 11:36:01

票数 3
EN

Stack Overflow用户

发布于 2009-12-23 13:52:44

我赞扬你想要自己做这件事的愿望。

回到20世纪50年代,没有超级计算机的大多数人是无法获得随机数的。兰德公司出版了一本名为《具有10万个正态偏差的百万随机数字》的书,它的字面意思就是:随机数。它很棒,因为它使外行能够使用高质量的随机数进行研究。

现在,回到你的问题上。

我建议您阅读有关如何使用这本书的instructions (是的,它附带了说明),并尝试在您的Python代码中实现它。这将不是有效或优雅的,但您将理解您最终满足的算法的含义。我喜欢指导你的部分

打开书到数字表中未选中的一页,盲目地选择一个五位数,第一位数减为模2,确定起始行;初始选择的五位数右边的两位数减50,以确定起始行的起始列

阅读那张数字表格是一门艺术!

可以肯定的是,我并不是鼓励您重新发明生产代码的轮子。我鼓励你通过实现一个聪明的,如果不是非常有效的随机数生成器来学习随机性的艺术。

我的工作要求我使用高质量的随机数,在有限的情况下,我发现网站www.random.org是一个非常好的洞察力和材料来源。来自他们的网站:

RANDOM.ORG向互联网上的任何人提供真正的随机数字。随机性来自大气噪声,在许多情况下,大气噪声比计算机程序中通常使用的伪随机数算法更好。人们使用RANDOM.ORG来持有抽奖、彩票和彩票,驱动游戏和赌博网站,用于科学应用以及艺术和音乐。

现在,去实现你自己的抽奖吧。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1950539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档