非常简单的Python脚本,令人费解的行为

2024-06-06 21:50:37 发布

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

首先,我不是程序员,所以这个问题的答案对于更有经验的人来说可能是非常明显的。 我一直在用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,这似乎没有意义。 这几乎只是一个无聊的好奇,为什么这个脚本的行为和它一样。在


Tags: 答案脚本trueifrandom经验概率程序员
2条回答

顺便说一句,为了“生成包含在0和9之间的3个不同的随机分布整数”的最佳方法,我衷心推荐a, b, c = random.sample(xrange(10), 3)[[s/xrange/range/in python3.0]],而不是使用的while循环。在

结果取决于第13行是否:

sub[random.randint(0,9)] = 1

命中与第11行或第12行之一相同的索引:

^{pr2}$

您可以保护secondfirst相同,但不能保护第三个条目与first或{}中的一个相同。在

相关问题 更多 >