Materjalid koostas ja kursuse viib läbi
Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm
< eelmine | 2. nädala sisukord | järgmine > |
2.5 Juhuslik arv
Vahest läheb programmeerimises vaja, et arvuti oskaks genereerida juhuslikke arve. Näiteks proovime teha programmi, mis simuleeriks mündiviskamist ja saaks tulemuseks kulli või kirja.
Kuidas panna arvuti juhuslikult valima kahe valiku vahel?
Selles tulebki meile appi juhusliku arvu genereerimine. Funktsiooniga randint(1,2)
saame võrdse tõenäosusega ühe arvu vahemikust 1-st 2-ni (mõlemad kaasaarvatud). Kuna sinna vahemikku jäävadki vaid kaks arvu: 1 ja 2, siis valitakse nende vahel. Kumb igal konkreetsel juhul tuleb, ei ole ette teada.
Võrdse tõenäosuse puhul on mõlema juhu tõenäosus 50% (sageli öeldakse ka 0,5). Kui teha piisavalt palju katseid, siis umbes samapaljudel juhtudel tuleb tulemuseks 1 kui 2. Oluline on siin märkida, et väikestel katsearvudel võib erinevus olla täiesti märgatav. Näiteks vabalt võib juhtuda, et kümnest juhust on seitsmel juhul 1 ja kolmel juhul 2. Järgmisel nädalal asume juhuslikkust tsükliliselt "kontrollima".
Sageli on meil aga vaja rohkem variante kui kaks. Näiteks randint(1,3)
annab kas arvu 1, 2 või 3. Igaühe tõenäosus on siis ligikaudu 33,3% (1/3).
Funktsiooni randint()
saab aga kasutada ainult siis, kui esimesele reale kirjutada, et seda funktsiooni programmis kasutatakse:
from random import randint
See tähendab, et me impordime moodulist random
funktsiooni randint
. Seal moodulis on veel teisigi huvitavaid funktsioone. Juhuslikke arve saab veel mooduli secrets
abil, mille kasutamine on turvaline ka krüptograafiliste programmide puhul.
Meie aga jätkame siiski mooduliga random
, mille kõik funktsioonid impordime korraga:
from random import *
Proovige aga nüüd järgmist programmi:
from random import randint suvaline_arv = randint(1, 2) if suvaline_arv == 1: arvuti_valik = "kull" else: arvuti_valik = "kiri" print("Mündiviskes võitis: " + arvuti_valik)
Kui nüüd küsida kasutajalt, kas ta valib kulli või kirja, siis saamegi kulli ja kirja viskamise mängu:
from random import randint print("Kas kull (1) või kiri (2)?") kasutaja_valik = int(input()) suvaline_arv = randint(1, 2) if kasutaja_valik == suvaline_arv: print("Arvasid õigesti.") else: print("Arvasid valesti.")
Teeme nüüd programmi ümber lisades selle tingimuslause ühte harusse teise tingimuslause.
from random import randint print("Kas kull (1) või kiri (2)?") kasutaja_valik = int(input()) suvaline_arv = randint(1, 2) if kasutaja_valik == suvaline_arv: print("Arvasid õigesti.") suvaline_arv2 = randint(1, 2) if kasutaja_valik == suvaline_arv2: print("Arvamus oli õige ka teisel korral.") else: print("Teist korda see arvamus enam õige ei olnud.") else: print("Arvasid valesti.")
Ülesanne
Kes tahab sel teemal edasi mõtiskleda, võiksid läbi mõelda, mis oleks teisiti, kui
suvaline_arv2 = randint(1, 2)
asemel oleks suvaline_arv2 = randint(1, 3)
või
suvaline_arv2 = randint(1, 2)
asemel oleks suvaline_arv1 = randint(1, 2)
VIDEO
Kui materjalis juhuslikust arvust midagi selgusetuks jäi, siis vaadake kokkuvõtvat videot.
< eelmine | 2. nädala sisukord | järgmine > |