18 Juhuslik arv. Seiklusmäng

Eelmisel nädalal tutvusime juhuslike arvudega, mida saab kasutada näiteks erinevate mänguliste programmide loomisel. Nüüd saame juhuslikkust koos tsükliga rakendada. Uurime täringute veeretamist, ebavõrdseid tõenäosusi ning kirjutame väikese seiklusmängu.

VISKAME TÄRINGUID

Teeme programmi, mis viskab viis korda täringut. Olgu see tavaline kuuetahuline täring.

Näiteprogramm. Täring I

from random import randint
i = 1
while i < 6:
    print("Täringu " + str(i) + ". viskel saadi " + str(randint(1, 6)) + ".")
    i += 1

Sageli tahame viske tulemusega midagi rohkemat teha, näiteks tulemused kokku liita ja kuue saamisel eriliselt rõõmustada.

Näiteprogramm. Täring II

from random import randint
i = 1
tulemus = 0
while i < 6:
    vise = randint(1, 6)
    print("Täringu " + str(i) + ". viskel saadi " + str(vise) + ".")
    if vise == 6:
        print("Hurraaaaaaaa!")
    tulemus += vise
    i += 1
print("Kogutulemus on " + str(tulemus) + ".")

Võid muuta programmi nii, et 6-tahulise täringu asemel kasutataks mõnd teistsuguse tahkude arvuga täringut. Tahkude arvu võib küsida ka kasutajalt.

EBAVÕRDSED TÕENÄOSUSED

Eelmises näites oli meie kuuetahulise täringu igal viskel iga tahu esinemise tõenäosus 1/6, mille tagas funktsioon randint(1, 6). Mündiviske puhul saame ausa mündi funktsiooni randint(1, 2) abil.

Olgu nüüd olukord, kus keegi on mündiga manipuleerinud ning teinud nii, et kulli ja kirja tõenäosused pole enam võrdsed. Olgu kirja tulemise tõenäosus 73% (ehk 0,73). Selle esitamiseks kasutame funktsiooni randint(1, 100), mis annab võrdse tõenäosusega ühe täisarvu lõigus 1 kuni 100. Saadud arv on 73 või väiksem tõenäosusega 73%. Kirjutame järgmise programmi:

Näiteprogramm. Ebavõrdne münt

from random import randint
tõenäosus = 73
i = 0
while i < 10:
    if randint(1, 100) <= tõenäosus:
        print("kiri")
    else:
        print("kull")
    i += 1

Programmi käivitades näeme, et kiri esineb tavaliselt sagedamini kui kull. Proovi lisada programmile loendur, mis kirjade arvu jälgiks. Suurenda ka tsükli korduste arvu: piisavalt paljude tsükli kordustega läheneb kirjade osakaal 73%-le. Samalaadselt simuleeritakse erinevaid tõenäosuslikke protsesse paljudes programmides.

SEIKLUS METSAS

Järgmine programm on eelnevatest pikem ja simuleerib võimalikku jalutuskäiku metsas, kus leidub nii ohte kui ahvatlusi. Katseta programmi ning mõtle selle ehitusele. Programmi plokkskeem joonisel 1 avaneb peale vajutades suuremalt.

Näiteprogramm. Seiklus metsas

from random import randint
elusid = 3
münte = 0
while elusid > 0:
    print("Jalutasid metsas ja nägid ", end = "") # ei vaheta rida
    kedaMida = randint(1, 3)
    if kedaMida == 1:
        print("seent", end = "") # ei vaheta rida
        if randint(1, 2) == 1:
            print(", mis kahjuks oli mürgiseen ja sa kaotasid ühe elu.")
            elusid -= 1
        else:
            print(", mis õnneks oli söögiseen ja sa said selle müügist ühe kuldmündi.")     
            münte += 1
    elif kedaMida == 2:
        print("karu", end = "") # ei vaheta rida
        if randint(1, 2) == 1:
            print(", kes kahjuks oli vihane ja sa kaotasid ühe elu.")
            elusid -= 1
        else:
            print(", kes õnneks oli rõõmus ja sa said temalt 5 kuldmünti.")     
            münte += 5
    else:
        print("kuldmünti ja said selle endale.")
        münte +=1
    print("Nüüd on sul " + str(elusid) + " elu ja " + str(münte) + " kuldmünti.")
    input("Jätkamiseks vajuta Enter-klahvi.")
print("Sellega on su seiklus kahjuks läbi.")
Joonis 1. “Seiklus metsas” plokkskeem

Täienda programmi. Näiteks tee nii, et

  • teatud müntide arvu juures kuulutatakse mängija võitjaks (hetkel on võimalik ainult kaotada);
  • ohte või ahvatlusi oleks rohkem;
  • elu kaotamise tõenäosus oleks väiksem;
  • kasutaja saaks saatuse määramisel kuidagi kaasa lüüa.

Enesekontroll (1 küsimus)

Palun kommenteeri seda materjali Google’i küsimustikus.

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Programmeerimine on loodud Eno Tõnisson, Tauno Palts, Merilin Säde, Kaarel Tõnisson jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut