11 Juhuslik arv
Vahel 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?
Selleks tuleb meile appi juhusliku arvu genereerimine. Funktsiooniga randint(1,2)
saame võrdse tõenäosusega ühe arvu vahemikust 1-st 2-ni (mõlemad kaasa arvatud). 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 tulemused 1 kui 2 esinevad ligikaudu sama arv kordi. Oluline on siin märkida, et väikestel katsearvudel võib erinevus olla täiesti märgatav. Vabalt võib juhtuda, et kümnest juhust on seitsmel juhul 1 ja kolmel juhul 2.
Sageli on meil vaja rohkem variante kui kaks. Näiteks
annab kas arvu 1, 2 või 3. Igaühe tõenäosus on siis ligikaudu 33,3% (1/3).randint(1,3)
Funktsiooni
saab kasutada ainult siis, kui esimesele reale kirjutada, et seda funktsiooni programmis kasutatakse:randint()
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 jätkame siiski mooduliga random
, mille kõik funktsioonid saab importida korraga:
from random import *
Katseta järgmist programmi:
Näiteprogramm. Mündivise I
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:
Näiteprogramm. Mündivise II
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.")
Lisame ühte tingimuslause harusse veel teise tingimuslause:
Näiteprogramm. Mündivise III
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.")
Selle programmi plokkskeem on järgnev:
Enesekontroll (1 ülesanne)
Kes tahab sel teemal edasi mõtiskleda, võib läbi mõelda, mis oleks teisiti, kui
asemel olekssuvaline_arv2 = randint(1, 2)
suvaline_arv2 = randint(1, 3)
asemel olekssuvaline_arv2 = randint(1, 2)
suvaline_arv1 = randint(1, 2)
Videomaterjal
Vaata ka juhuslike arvude kokkuvõtvat videot.