Tehetséggondozás az informatikában

Három kocka, várható érték

Ahogyan a bevezetésben már utaltunk rá, a valószínűségszámítás hajnalán Cardano is, Galieli is foglalkozott azzal a kérdéssel, hogy három kockával dobva milyen gyakran–milyen valószínűséggel kapjuk a lehetséges összegeket.

Ezzel kapcsolatban modellezhetünk egy egyszerű szerencsejátékot is. Ábel, Bálint, Domonkos, Máté, Péter és Zalán játszik: valahányszor a három kocka összege az egyikük által választott számot adja, a nyertes minden játékostársától kap egy dukátot.

Az alapkérdés természetesen az lehet, hogy hosszabb távon ki nyer, de emellett érdemes lehet azt is vizsgálni, hogy ha több napon át játszanak sok fordulót, akkor mik lesznek az egyes napok „részeredményei”, azaz a hosszú távon vesztes hányszor érezheti úgy, hogy van reménye a nyereségre, illetve fordítva.

import random

def threedice():
    dP, dÁ, dB, dZ, dM, dD=  8, 9, 10, 11, 12, 13

    db= [0]*19

    n= int(input('Hány napon át játsszunk? '))
    m= int(input('Hány játékot játsszunk naponta? '))
    print("%8s%8s%8s%8s%8s%8s%8s%8s" % ('n', 'dsum', 'P- 8', 'Á- 9', 'B-10', 'Z-11', 'M-12', 'D-13'))
    for i in range(n):
        Á, B, D, M, P, Z, dsum= 0, 0, 0, 0, 0, 0, 0
        for j in range(m):
            d= random.randrange(6)+1 + random.randrange(6)+1 + random.randrange(6)+1
            db[d]+= 1
            dsum+= d
            if d==dÁ:
                Á+= 5; B-= 1; D-= 1; M-= 1; P-= 1; Z-= 1
            elif d==dB:
                Á-= 1; B+= 5; D-= 1; M-= 1; P-= 1; Z-= 1
            elif d==dD:
                Á-= 1; B-= 1; D+= 5; M-= 1; P-= 1; Z-= 1
            elif d==dM:
                Á-= 1; B-= 1; D-= 1; M+= 5; P-= 1; Z-= 1
            elif d==dP:
                Á-= 1; B-= 1; D-= 1; M-= 1; P+= 5; Z-= 1
            elif d==dZ:
                Á-= 1; B-= 1; D-= 1; M-= 1; P-= 1; Z+= 5
        print("%8d%8d%8d%8d%8d%8d%8d%8d" %(i+1, dsum, P, Á, B, Z, M, D))
    print()
    for i in range(3, 19):
        print("%8i" % i, end='')
    print()
    for i in range(3, 19):
        print("%8i" % db[i], end='')
    print('\n')

threedice()
A program egy lehetséges kimenete:
Hány napon át játsszunk? 10
Hány játékot játsszunk naponta? 1000

       n    dsum    P- 8    Á- 9    B-10    Z-11    M-12    D-13
       1   10515    -113      85      67      -5     -23     -11
       2   10391    -118      80     122     116     -88    -112
       3   10501    -171       9     135     105      99    -177
       4   10667    -146     -20     130      94     -56      -2
       5   10520     -22     -28      44      80     -16     -58
       6   10528     -93      -3      81      99      51    -135
       7   10334     -64     -10     176      62     -10    -154
       8   10547    -128      88      58      40      88    -146
       9   10618    -111     -45      81      51     129    -105
      10   10650    -165     -15     159      69       3     -51

       3       4       5       6       7       8       9      10      11      12      13      14      15      16      17      18
      43     145     258     458     671     947    1159    1311    1254    1165     977     685     442     279     157      49