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
abil.randint(1, 2)
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.")
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.