Skip to main content
 首页 » 编程设计

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

2025年05月04日11lyhabc

首先,我不是程序员,所以这个问题的答案对于更有经验的人来说可能是显而易见的。 我在玩 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 循环。