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

时间:2009-06-13 23:35:58

标签: 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,这似乎毫无意义。 这几乎只是空闲的好奇心,为什么这个脚本的行为就像它一样。

2 个答案:

答案 0 :(得分:5)

顺便说一句,对于“生成包含0到9之间的3个不同随机分布的整数”的最佳方法,我衷心地推荐a, b, c = random.sample(xrange(10), 3) [[s / xrange / range / in Python 3.0]]而不是{{ 1}}你正在使用的循环。

答案 1 :(得分:3)

结果取决于第13行:

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

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

sub[first] = 1
sub[second] = 1

您保护secondfirst不同,但您不保护第三个条目与firstsecond之一相同。< / p>