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
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.
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
我赞扬你自己做这件事的愿望。在
早在20世纪50年代,没有超级计算机(当时)的大多数人都无法获得随机数。兰德公司出版了一本名为《一百万个随机数与100000个正态偏差的随机数》的书,从字面上讲,就是随机数。因为它可以让外行进行高质量的研究。在
现在,回到你的问题上来。在
我建议您阅读关于如何使用书籍的instructions(是的,它附带了说明),并尝试在Python代码中实现它。这将不是高效或优雅的,但您将了解最终满足的算法的含义。我喜欢这个角色
读那张数字表真是一门艺术!在
可以肯定的是,我并不鼓励你为生产代码重新设计轮子。我鼓励你通过实现一个聪明的,如果不是非常有效的随机数生成器来学习随机性的艺术。在
我的工作要求我使用高质量的随机数,在有限的情况下,我发现网站www.random.org是一个非常好的洞察力和材料来源。从他们的网站:
现在,去实施你自己的彩票。在
参见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之间的随机或伪随机整型:我绝对清楚,但我非常希望!-)换句话说:只要需要并且可行,从剩余的项目中随机选择一个(辅助列表
listcopy
在任何步骤都会给我们“剩余的”,并且由.pop
修改而不改变输入参数thelist
,因为它是一个浅拷贝)。在相关问题 更多 >
编程相关推荐