Tee Eclipseen uusi projekti, jonka nimi on tehtava3_3. Luo sitten tähän projektiin moduuli arvailua.
Kirjoita ohjelma, joka arpoo kokonaisluvun väliltä 1 - 1000 ja sen jälkeen pyytää käyttäjää arvaamaan tämän luvun. Jos käyttäjän arvaus on liian pieni, ohjelma tulostaa "Vaarin, anna jokin suurempi luku!" ja jos käyttäjän arvaus on liian suuri, ohjelma tulostaa "Vaarin, anna jokin pienempi luku!". Tätä jatketaan niin kauan, että käyttäjä on arvannut oikean luvun. Tällöin ohjelma tulostaa "Hyva, hyva, arvasit oikein luvun N", missä N:n paikalla on arvattava luku. Lisäksi ohjelma kertoo, kuinka monta arvauskertaa käyttäjä käytti.
Luvun arpominen halutulta väliltä voidaan tehdä satunnaislukujen avulla. Seuraavassa kappaleessa on selostettu tarkemmin satunnaislukuja ja niiden käyttöä Python-ohjelmissa. Pystyt kuitenkin tekemään tehtävässä vaaditun ohjelman, vaikka et tutustuisi kappaleessa selitettyihin asioihin, jos käytät alla olevaa mallia. Kirjoita ohjelmatiedoston alkuun seuraavat rivit:
import random def main(): # "Arvotaan" ohjelman kysyma luku rivi = input("Anna aloitusluku luvun arpomista varten\n") lahtoluku = int(rivi) random.seed(lahtoluku) etsitty_luku = random.randint(1, 1000) # Aloita ohjelman kirjoittaminen tasta. Arvattava luku # on nyt muuttujan etsitty_luku arvona. # Ala unohda ohjelman lopusta paaohjelman kutsua main()Sinun ei siis tarvitse itse kirjoittaa luvun arpovaa koodia, vaan se on jo tehty yllä annetussa ohjelman osasta. Seuraavassa kappaleessa on selitetty vähän tarkemmin annetun koodin merkitystä. Oman ratkaisusi kirjoittamista varten tärkeintä on kuitenkin tietää, että yllä olevan koodin suorituksen jälkeen arvottu luku on muuttujassa
etsitty_luku
. Sinun pitää kirjoittaa koodi, joka pyytää
käyttäjältä uutta arvausta niin kauan, että käyttäjän antama luku on
sama kuin muuttujan etsitty_luku
arvo.
Lukujen arpomista matkitaan tietokoneohjelmissa satunnaislukujen
avulla. Satunnaisluku halutulta väliltä voidaan generoida Pythonin valmiin
moduulin random
avulla. Tämä sisältää funktion
randint(alaraja, ylaraja)
, jonka avulla saadaan
satunnainen kokonaisluku väliltä alaraja
-
ylaraja
.
Tietokoneella ei voi varsinaisesti arpoa mitään, vaan tietokone tekee laskutoimituksia, joiden lopputulos on aina määrätty, jos laskennassa käytetyt luvut ovat tiedossa. Arpomista voidaan kuitenkin tietokoneella matkia laskemalla satunnaislukuja. Tällöin tietokone laskee ns. siemenluvun ja mahdollisen edellisen generoidun satunnaisluvun perusteella sopiviksi todetuilla matemaattisilla kaavoilla luvun halutulta väliltä. Ohjelmoija voi joko määrätä käytettävän siemenluvun tai sitten se voidaan määrätä jollain muulla perusteella, esimerkiksi tietokoneen kellon tämänhetkisestä ajasta. Siemenluku määrää (yhdessä käytettyjen laskukaavojen kanssa) täysin sen, millaisen jonon satunnaislukuja tietokone laskee. Jos kahdelle samanlaiselle (samoja laskukaavoja käyttävälle) satunnaislukugeneraattorille annetaan sama siemenluku, ne tuottavat samanlaisen jonon satunnaislukuja.
Jotta satunnaislukuja käyttävän moduulin saisi käyttöön, on ohjelman alkuun kirjoitettava rivi
import randomTässä ohjelmassa satunnaislukujen arpomisessa käytettävä siemenluku kysytään käyttäjältä ja asetetaan ohjelmassa. Tämä tehdään siksi, että ohjelma voitaisiin tarkistaa Goblinilla. Siemenluvun avulla pidetään huolta siitä, että palauttamasi ohjelma ja Goblinin käyttämä malliratkaisu arpovat samat arvattavat luvut. Siemenluku asetetaan käskyllä
random.seed(aloitusluku)missä muuttujan
aloitusluku
arvona on haluttu siemenluku.
Tässä on käytetty hyväksi random
-modulissa valmiina
olevaa seed
-funktiota. Sen jälkeen itse luku arvotaan
käskyllä
random.randint(1, 1000)
Ohjelmasi ei tarvitse varautua siihen, että käyttäjä antaa lukuja pyydettäessä kirjaimia tai muuta roskaa. Jos käyttäjän arvaus on pienempi kuin 1 tai suurempi kuin 1000, ohjelma toimii ihan samoin kuin muutenkin silloin, kun käyttäjä antaa liian pienen tai suuren arvauksen. Se ei siis anna erityistä virheilmoitusta näissä tapauksissa.
Ennen kuin palautat ohjelman Gobliniin, testaa sitä useita kertoja eri siemenluvuilla ajamalla ohjelmaa itse Eclipsessä. Jos haluat, voit testausvaiheessa lisätä ohjelmaan käskyn, joka tulostaa arvattavan luvun (näin on helpompi tarkistaa, että ohjelma toimii oikein). Poista kuitenkin tämä tulostuskäsky ennen kuin palautat ohjelman Gobliniin.
Palauta Gobliniin tiedosto arvailua.py.
[ohjelman suoritus alkaa] Anna aloitusluku luvun arpomista varten 29 Yrita arvata oikea luku valilta 1-1000! Anna arvauksesi. 500 Vaarin, anna jokin suurempi luku! Anna arvauksesi. 700 Vaarin, anna jokin pienempi luku! Anna arvauksesi. 600 Vaarin, anna jokin pienempi luku! Anna arvauksesi. 560 Vaarin, anna jokin suurempi luku! Anna arvauksesi. 562 Hyva, hyva, arvasit oikein luvun 562 Yritit arvata 5 kertaa. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa] Anna aloitusluku luvun arpomista varten 479 Yrita arvata oikea luku valilta 1-1000! Anna arvauksesi. 500 Vaarin, anna jokin suurempi luku! Anna arvauksesi. 1122 Vaarin, anna jokin pienempi luku! Anna arvauksesi. 750 Vaarin, anna jokin suurempi luku! Anna arvauksesi. 875 Vaarin, anna jokin suurempi luku! Anna arvauksesi. 937 Vaarin, anna jokin suurempi luku! Anna arvauksesi. 969 Vaarin, anna jokin pienempi luku! Anna arvauksesi. 953 Vaarin, anna jokin pienempi luku! Anna arvauksesi. 945 Vaarin, anna jokin pienempi luku! Anna arvauksesi. 941 Vaarin, anna jokin pienempi luku! Anna arvauksesi. 939 Vaarin, anna jokin suurempi luku! Anna arvauksesi. 940 Hyva, hyva, arvasit oikein luvun 940 Yritit arvata 11 kertaa. [ohjelman suoritus päättyy]
Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta