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

1 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
Run Code Online (Sandbox Code Playgroud)

现在,这不是我最初试图解决的问题,这个脚本的结果应该是34/90或大约37.7,这是足够简单的组合.有时,脚本会给出结果,但更常见的是它给出53.4,这似乎毫无意义.这几乎只是空闲的好奇心,为什么这个脚本的行为就像它一样.

Ale*_*lli 5

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