2015-06-14 5 views
0

Я пишу скрипт python, чтобы узнать некоторые вещи о рандомизации.randint() непредвиденное поведение

У меня есть следующий код:

from random import randint 

one = 0 
two = 0 

olddiff = 0 
diff = 0 

sumdiff = 0 
avgdiff = 0 

headcounter = 0 
counter = 0 


while (headcounter < 500000): 
    while (counter < 500): 
     x = randint(1,2) 
     if(x==1): 
      one += 1 
     else: 
      two += 1 

     counter+=1 

    if (one > two): 
     diff = one - two 
    else: 
     diff = two - one 

    sumdiff += diff 

    if(diff > olddiff): 
     olddiff = diff 

    headcounter +=1 


avgdiff = sumdiff/500000 


print "Occurences of 1: %d" % (one) 
print "Occurences of 2: %d" % (two) 
print "After 500000 calculations, the max difference found is %d" % (olddiff) 
print "Sum of the differences is %d" % (sumdiff) 
print "The average difference is %d" % (avgdiff) 

Однако я получаю этот неожиданный результат:

Первая попытка:

Occurences of 1: 262 
Occurences of 2: 238 
After 500000 calculations, the max difference found is 24 
Sum of the differences is 24000 
The average difference is 24 

Вторая попытка:

Occurences of 1: 247 
Occurences of 2: 253 
After 500000 calculations, the max difference found is 6 
Sum of the differences is 3000000 
The average difference is 6 

Третий попробуйте:

Occurences of 1: 252 
Occurences of 2: 248 
After 500000 calculations, the max difference found is 4 
Sum of the differences is 2000000 
The average difference is 4 

Etc ...

В 50 раз я запустить его, никогда нет разницы между максимальной разницей и средней разностью. Это также каждый раз, когда текущая разница.

Есть ли что-то не в порядке с моим кодом или это ожидается из-за механизмов функции randint()?

+0

Привет, Martijn, Извините, этого не было. Я пересмотрел сценарий и увидел, в чем проблема, поэтому я удалил вопрос, не обновляя страницу! Извинения! – Midas

ответ

1

Вы никогда не сбросить counter в цикле, так что вы только рассчитали one и two значения от раз. Другие 499999 запускают повторное использование тех же one и two, потому что условие while (counter < 500) остается False.

Вы можете легко увидеть эффект в столбцах one и two; они только добавляют до 500.