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?).

Nauczyciel matematyki i przedmiotów informatycznych w Dwujęzycznych Szkołach im. Władysława Kopalińskiego w Bielsku-Białej. Autor wielu publikacji poświęconych nauce podstaw programowania, w tym „Scratch. Nauka programowania przez zabawę”, wydanej drukiem przez wydawnictwo Komputer Świat. Entuzjasta wykorzystywania nowych nowoczesnych narzędzi w czasie lekcji. Prywatnie miłośnik koszykówki i aktywnego wykorzystywania czasu.

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.