Tehetséggondozás az informatikában

Három kocka, több kocka

A Cardano, illetve Galilei által is vizsgált feladatban három kockával dobunk, s azt vizsgáljuk, mekkora eséllyel kapjuk a lehetséges összegeket.

Átírhatnánk mechanikusan az előző programot, de most általánosítsunk: a felhasználó fogja megadni meg a kockák számát is.

import random

def ndice():
    print('\nn kockával dobunk, hányszor kapjuk a lehetséges összegeket?\n')
    k= int(input('Hány kockával dobjunk? '))
    n= int(input('Hányszor dobjunk? '))
    db= [0]*(6*n+1)
    dsum= 0
    print()

    for i in range(n):
        d= 0
        for j in range(k):
            d+= random.randrange(6)+1
        db[d]+= 1
        dsum+= d

    print("%8s%8s%8s" % ('n', 'összeg', 'átlag'))
    print("%8i%8i%8.5f" % (n, dsum, dsum/n))
    print()
    print("%-16s" % ('összeg:'), end='')
    for i in range(k, 6*k+1):
        print("%8i" % (i), end='')
    print()
    print("%-16s" % ('esetszám:'), end='')
    for i in range(k, 6*k+1):
        print("%8i" % (db[i]), end='')
    print()
    print("%-16s" % ('gyakoriság:'), end='')
    for i in range(k, 6*k+1):
        print("  %5.2f%%" % (db[i]/n*100), end='')
    print()
    print("%-16s" % ('6k-szor:'), end='')
    for i in range(k, 6*k+1):
        print("  %6.3f" % (db[i]/n*6**k), end='')
    print('\n')
    for i in range(k, 6*k+1):
        print('%2i: %s' % (i, 'X'*round(db[i]/n*480)))

ndice()
k=3 esetén egy kimenet:
n kockával dobunk, hányszor kapjuk a lehetséges összegeket?

Hány kockával dobjunk? 3
Hányszor dobjunk? 1000000

       n  összeg   átlag
 10000001049988710.49989

összeg:                3       4       5       6       7       8       9      10      11      12      13      14      15      16      17      18
esetszám:           4611   13945   27809   46165   69241   97397  116076  124854  124819  115772   97369   69314   46353   27868   13823    4584
gyakoriság:        0.46%   1.39%   2.78%   4.62%   6.92%   9.74%  11.61%  12.49%  12.48%  11.58%   9.74%   6.93%   4.64%   2.79%   1.38%   0.46%
6k-szor:           0.996   3.012   6.007   9.972  14.956  21.038  25.072  26.968  26.961  25.007  21.032  14.972  10.012   6.019   2.986   0.990

 3: XX
 4: XXXXXXX
 5: XXXXXXXXXXXXX
 6: XXXXXXXXXXXXXXXXXXXXXX
 7: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 8: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 9: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
10: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
11: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
12: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
13: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
14: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
15: XXXXXXXXXXXXXXXXXXXXXX
16: XXXXXXXXXXXXX
17: XXXXXXX
18: XX
Ahogy a 63-, azaz 216-szoros eredményekből látszik, itt az eloszlást tükröző törtek számlálója már összetettebb képet mutat, mint az előző esetben (nem mellesleg az is kitűnik ezekből, hogy a 9-et alighanem 25/216, a 10-et pedig 27/216 valószínűséggel kapjuk – úgy gondolhatjuk, az utóbbi érdemben nagyobb, de ahogy a korábban hivatkozott cikkben olvasható, ennek megtapasztalásához igen nagy számú kísérletet kell végrehajtani).

Végül lássunk egy szépen kisimult eloszlásfüggvényt (24 kockával és 1000000 dobással):

 58: X
 59: X
 60: X
 61: XX
 62: XXX
 63: XXXX
 64: XXXXX
 65: XXXXXXX
 66: XXXXXXXX
 67: XXXXXXXXXXX
 68: XXXXXXXXXXXXXX
 69: XXXXXXXXXXXXXXXXXX
 70: XXXXXXXXXXXXXXXXXXXXXX
 71: XXXXXXXXXXXXXXXXXXXXXXXXXX
 72: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 73: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 74: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 75: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 76: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 77: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 78: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 79: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 80: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 81: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 82: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 83: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 84: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 85: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 86: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 87: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 88: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 89: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 90: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 91: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 92: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 93: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 94: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 95: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 96: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 97: XXXXXXXXXXXXXXXXXXXXXXXXXX
 98: XXXXXXXXXXXXXXXXXXXXX
 99: XXXXXXXXXXXXXXXXXX
100: XXXXXXXXXXXXXX
101: XXXXXXXXXXX
102: XXXXXXXX
103: XXXXXX
104: XXXXX
105: XXXX
106: XXX
107: XX
108: X
109: X
110: X