Прежде всего, я не программист, поэтому ответ на этот вопрос может быть совершенно очевидным для кого-то более опытного.
Я играл с 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, что, кажется, не имеет смысла.
Это довольно простое любопытство относительно того, почему именно этот скрипт ведет себя так, как он.