Symulowanie doświadczeń losowych w Pythonie

Python do dobre narzędzie dla nauczycieli matematyki i uczniów. Pozwala na szybkie otrzymanie wyników doświadczenia losowego, których wypisywanie ręcznie byłoby dość pracochłonne. Oczywiście na sprawdzianie z matematyki, czy jakimkolwiek egzaminie, Pythona zapewne nie dostaniemy do dyspozycji, ale jakoś tak jest, że warunki szkolne i problemy, z którymi mamy do czynienia na co dzień, to często dwie zupełnie inne bajki. Zachęcam więc do przeczytania rozwinięcia artykułu, by się przekonać, jak programowanie i zadania z matematyki mogą ze sobą współpracować.

Czas na zadanie

Jako przykład takiego doświadczenia podam zadanie, polegające na obliczeniu prawdopodobieństwa tego, że w trzykrotnym rzucie symetryczną, sześcienną kostką do gry wypadnie suma wszystkich oczek równa 12. Jest to, moim zdaniem, problem, z jakim można się spotkać na teście maturalnym z matematyki na poziomie rozszerzonym (na podstawowym od dłuższego czasu pojawiają się przeważnie zadania z dwoma rzutami kostką). Zachęcam osoby posiadające trochę wolnego czasu na spróbowanie swoich sił z tym zadaniem i sprawdzenie swoich wyników u dołu artykułu.

Pomówmy o kodzie

Zacznijmy od omówienia kodu. Składa się on z potrójnej pętli, wędrującej po kolei po wszystkich możliwych wynikach naszego rzutu. Pierwszym będzie trójka (1, 1, 1), drugim (1, 1, 2) i tak dalej, aż dojdziemy do ostatniego – (6, 6, 6). Wszystkie wyniki zapisujemy w liście o nazwie sumy. Następnie, tworzymy słownik o nazwie czestosc, którego zadaniem będzie zliczenie, ile poszczególnych wyników wypadło. Pętla obsługująca ten słownik sprawdza, czy wynik już się w nim znajduje. Jeśli tak, to zwiększa wartość przy nim o 1, a jeśli nie, to ustawia tę wartość na 1. Ostatnia pętla wypisuje w przystępnej formie wszystkie wyniki znajdujące się w słowniku czestosc.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#Trzykrotny rzut sześcienną kostką do gry
sumy = []
for i in range(1,7):
  for j in range(1,7):
    for k in range(1,7):
      sumy.append(i+j+k)
czestosc = {}
for i in sumy:
  if i in czestosc:
    czestosc[i] += 1
  else:
    czestosc[i] = 1
for i in sorted(czestosc):
  print("{:2d} -- {:2d}".format(i, czestosc[i]))

Co otrzymaliśmy?

Wyniki działania powyższego kodu są zobrazowane na poniższej grafice:

Wyniki trzykrotnego rzutu sześcienną kostką, a następnie sumowania oczek

Widzimy tu, że suma oczek równa 12 wypada aż w 25 przypadkach. Jak już wspomniałem, wypisywanie wszystkich wyników na pewno byłoby kłopotliwe i czasochłonne.

Możemy zatem przejść do liczenia prawdopodobieństwa:
$ |\Omega| = 216$ (wszystkie możliwe wyniki w trzykrotnym rzucie sześcienną kostką),
$|A| = 25$ (wyniki, które po zsumowaniu oczek dadzą wynik 12)
$P(A) = \frac{25}{216}$

Podsumowanie

Powyższy problem i sposób jego rozwiązania jest dobrym przykładem na to, jak umiejętność kodowania może ułatwiać ludziom życie i oszczędzać czas. Tak pracując i tak rozumując będziemy w stanie lepiej się uczyć i możliwe, że zauważać inne sposoby na rozwiązanie danego problemu – już bez komputera (Widząc wyniki, zauważyłem, że są to kolejne liczby trójkątne. Dlaczego tak jest?).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

This site uses Akismet to reduce spam. Learn how your comment data is processed.