首先,我不是程序员,所以对于经验丰富的人来说,这个答案可能是完全明显的。 我正在玩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,这似乎毫无意义。 这几乎只是空闲的好奇心,为什么这个脚本的行为就像它一样。
答案 0 :(得分:5)
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
您保护second
与first
不同,但您不保护第三个条目与first
或second
之一相同。< / p>