python彩票建议

2024-04-29 05:41:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道python提供随机模块来做一些简单的抽奖。说吧随机洗牌()是一个好的。在

但是,我想建立一个我自己的简单。我应该调查什么?彩票背后有什么具体的数学哲学吗?在

比如说,最简单的情况。100个名字随机产生20个名字。在

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

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


Tags: 模块情况数学名字建议shuffle彩票哲学
3条回答

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

早在20世纪50年代,没有超级计算机(当时)的大多数人都无法获得随机数。兰德公司出版了一本名为《一百万个随机数与100000个正态偏差的随机数》的书,从字面上讲,就是随机数。因为它可以让外行进行高质量的研究。在

现在,回到你的问题上来。在

我建议您阅读关于如何使用书籍instructions(是的,它附带了说明),并尝试在Python代码中实现它。这将不是高效或优雅的,但您将了解最终满足的算法的含义。我喜欢这个角色

open the book to an unselected page of the digit table and blindly choose a five-digit number; this number with the first number reduced modulo 2 determines the starting line; the two digits to the right of the initially selected five-digit number are reduced modulo 50 to determine the starting column in the starting line

读那张数字表真是一门艺术!在

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

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

RANDOM.ORG offers true random numbers to anyone on the Internet. The randomness comes from atmospheric noise, which for many purposes is better than the pseudo-random number algorithms typically used in computer programs. People use RANDOM.ORG for holding drawings, lotteries and sweepstakes, to drive games and gambling sites, for scientific applications and for art and music.

现在,去实施你自己的彩票。在

参见Fisher-Yates Shuffle,在Knuth的The Art of Computer Programming中也有描述。在

你可以生成自己的伪随机数——这背后有大量的理论依据,比如here——当然,无论是在质量还是速度上,你都无法与Python的random“Mersenne twister”(在我指给你的大wikipedia页面的中间解释过),但是为了理解,它是努力吧。或者,你可以得到物理随机数,例如在Linux机器上的/dev/random/dev/urandom(Windows机器也有自己的接口),一个有更大的物理随机性,另一个有更好的性能。在

一旦你有了(或借用了random;-)一个伪随机(或真随机)数字生成器,从100中随机抽取20个项目仍然是一个有趣的问题。虽然洗牌是一种更通用的方法,但更容易理解的方法可能是,假设您的myrand(N)函数返回一个介于0 included和N excluded之间的随机或伪随机整型:

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,因为它是一个浅拷贝)。在

相关问题 更多 >