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 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 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 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

  • suvaline_arv2 = randint(1, 2) asemel oleks suvaline_arv2 = randint(1, 3)
  • suvaline_arv2 = randint(1, 2) asemel oleks suvaline_arv1 = randint(1, 2)

Videomaterjal

Vaata ka juhuslike arvude kokkuvõtvat videot.

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