首先,我不是程序员,所以这个问题的答案对于更有经验的人来说可能是显而易见的。 我在玩 python(2.5) 来解决一些概率难题,但是我一直得到的结果与我认为应该的结果相去甚远。因此,经过一些试验,我设法确定了导致问题的行为。 似乎隔离了奇怪行为的脚本是这样的:
import random
random.seed()
reps = 1000000
sub = [0]*10
hits = 0
first = random.randint(0,9)
while True:
second = random.randint(0,9)
if second != first:
break
sub[first] = 1
sub[second] = 1
sub[random.randint(0,9)] = 1
for i in range(1,reps):
first = random.randint(0,9)
while True:
second = random.randint(0,9)
if second != first:
break
if ((sub[first]) or (sub[second])):
hits = hits + 1
print "result: ", hits*1.0/reps*100.0
现在,这不是我最初试图解决的问题,这个脚本的结果应该是 34/90 或 37.7 左右,这是足够简单的组合。有时,脚本确实给出了该结果,但更多时候它给出了 53.4,这似乎没有意义。 这几乎只是无聊的好奇,为什么这个脚本的行为会像它那样。
请您参考如下方法:
顺便说一句,对于“生成 3 个介于 0 和 9 之间的不同随机分布整数”的最佳方法,我衷心推荐 a, b, c = random.sample(xrange(10), 3) [[Python 3.0 中的 s/xrange/range/]] 而不是您正在使用的 while 循环。
