Tenttiohje¶
Kuten arvostelusivulla todetaan, kurssiin kuuluu ohjelmointitentti, joka on suoritettava hyväksytysti, mikäli haluaa ykköstä korkeamman arvosanan. Tentti suoritetaan yliopiston Examinarium-tilassa olevilla tietokoneilla.
Tällä sivulla on kerrottu kaikki, mitä tästä tentistä on hyvä tietää etukäteen. Lue siis ohjeet huolellisesti hyvissä ajoin ennen kuin menet tekemään tenttiä. Lue myös Exam-järjestelmän ohje, jos et ole ennen käynyt tekemässä sähköistä tenttiä.
Tentti on auki riittävän pitkän aikaa, jotta kaikki ehtivät sen käydä tekemässä. Tähän laskelmaan on huomioitu se, että tenttitilassa on rajallinen määrä koneita, joilla tentin voi tällä hetkellä tehdä.
Mitä tentissä pitää osata?¶
Tentissä on ainakin tällä kerralla vain yksi kysymys, jossa on annettu kurssin harjoitustehtävien tavoin kuvaus toteutettavasta funktiosta. Aiheita on useita, ja E-exam arpoo jokaiselle tekijälle niistä yhden. Kysymysten vaikeusaste on suurin piirtein samalla tasolla kolmannen ja neljännen harjoitusten tehtävien kanssa. Useimpien mallivastaus sisältää noin 10 riviä koodia.
Kaikissa aiheissa tulee hallita ohjausrakenteet ja tietorakenteet. Erityisesti kannattaa kerrata miten käsitellä sisäkkäisiä tietorakenteita, eli tietorakenteita jotka sisältävät muita tietorakenteita. Myös tietorakenteiden käsittely silmukoissa on tärkeä hallita. Huomaa, että monimutkaisempaa tietorakenteiden käsittelyä on harjoiteltu pääasiassa lopputyöaiheisiin liittyvissä tehtävissä. Jos et ole tehnyt niitä, varmista, että ymmärrät miten esim. materiaalin koodiesimerkit toimivat.
Tentissä on käytettävissä materiaalin offline-versio, jonka voi ladata koneelle tentin liitteistä. Siitä löytyy jokainen päämateriaalisivu (yhteensä 4 kpl).
Tenttikoneiden käyttö¶
Tenttikoneilla voi kirjoittaa ja suorittaa Python-koodia. Varmista ennen tenttiä, että osaat tallentaa Notepad++-ohjelmalla Python-kooditiedoston kansioon, ja suorittaa sen terminaalissa. Tenttikoneet käyttävät WinPython-nimistä asennuspakettia, jonka toimintaa voit halutessasi kokeilla etukäteen omalla koneellasi. Tietokoneilla ei ole pääsyä internetiin, eikä tenttitilaan saa viedä puhelimia tai muita laitteita. Pythonin offline-dokumentaatio, jonka sisältö vastaa docs.python.org-sivuston sisältöä on selattavissa tenttikoneilla.
Oheiset tiedot on annettu myös tentin ohjeissa Examissa:
WinPython löytyy tiedostoselaimella kansiosta
C:\WinPython. Terminaalin saat auki kaksoisklikkaamalla kuvaketta "WinPython Command Prompt". Tässä terminaalissa voit mennä Downloads-kansioon kirjoittamalla cd C:\Users\Exam\Downloads.NotePad++ löytyy kun kirjoitat alareunan hakupalkkiin notepad. Muista tallentaa koodisi Downloads-kansioon, jotta se on samassa paikassa testikoodin kanssa.
Pythonin dokumentaation löydät kansiosta
C:\WinPython\python\Doc\html\ ja voit avata ne selaimeen kaksoisklikkaamalla index.html-tiedostoa ja valitsemalla Firefox avaavaksi ohjelmaksi.Mistä tiedän, että olen tehnyt tehtävän oikein?¶
Kaikissa aiheissa tulee mukana testiohjelma, jolla voit testata vastaustasi. Jotta testiohjelma voi toimia, täytyy koodistasi löytyä oikean niminen funktio, ja myös itse kooditiedoston pitää olla tallennettuna samaan paikkaan testikoodin kanssa, tehtäväkuvauksessa määritetyllä nimellä. Kun lataat testikoodin Examista, se menee Downloads-kansioon. Suositus on siis, että tallennat myös oman koodisi tähän kansioon. Testikoodi suoritetaan samalla tavalla kuin mikä tahansa muukin Python-ohjelma terminaalissa.
Testiohjelma tekee aiheesta riippuen vaihtelevan määrän testejä ja kertoo mitkä niistä menivät läpi. Jos kaikki testit menevät läpi, ohjelmasi toimii oikein, kunhan se on tehty kunnolla eikä pelkästään käytä ehtolausetta palauttamaan sen tuloksen, mitä kukin testi odottaa. Vastauksesi testataan palautuksen jälkeen myös satunnaisilla testiarvoilla ennen tentin hyväksymistä.
Testiohjelmissa ei ole aputulostuksia kuten Lovelacessa olevissa tarkistimissa, mutta saat vapaasti lisätä niitä sinne itse. Jos muokkaat testiohjelmia, varmista, että ne edelleen testaavat samat asiat samalla tavalla, jotta et vahingossa sabotoi omaa suoritustasi. Jos olet muokannut testiohjelmaa paljon, kannattaa lopuksi ladata se uudestaan kysymyksen liitteistä ja varmistaa, että alkuperäisessä muodossa olevat testit menevät edelleen läpi.
Voiko tentin uusia?¶
Tentin uusintaa koskee yliopiston yleinen tenttiohjesääntö, eli tentti järjestetään kolme kertaa vuodessa - kerran syksyllä, kerran keväällä ja kerran kesällä. Kullakin järjestyskerralla tentin voi kuitenkin tehdä vain kerran. Lisähuomio: vaikka järjestelmä antaa varata uuden ajan heti kun tentti on arvioitu, tarvitset erillisen luvan tehdä tentti uudestaan samalla järjestyskerralla. Ilman lupaa tehtyä uusintayritystä ei arvostella.
Tentin "vastauslaatikko"¶
Koska tenttijärjestelmä ei ole suoraan yhteydessä Lovelacen kanssa, kirjanpidon helpottamiseksi alla on tehtävälaatikko, johon vastaamalla ilmaiset kurssin henkilökunnalle, että olet käynyt suorittamassa tentin. Opettaja arvostelee tenttivastauksen ja merkitsee sitten tämän "tehtävän" suoritetuksi, jos tenttivastaus hyväksytään.
Harjoituskysymyksiä¶
Alla on tehtäviä, jotka olivat ehdolla tenttiin, mutta hylättiin loppumetreillä. Tehtävänanto ja testikoodi ovat kuitenkin tenttiä varten tehtyjä versioita, joten voit käyttää niitä harjoittelua varten.
Shakki: Hevosen siirrot¶
Shakissa hevonen liikkuu aina joko 1 ruudun vaakaan ja 2 pystyyn, tai 2 pystyyn ja 1 vaakaan. Tässä tehtävässä rakennetaan funktio, joka näyttää mihin ruutuihin annetussa lähtöruudussa oleva hevonen voi liikkua. Lauta (8x8 ruutua) oletetaan tyhjäksi. Shakkilaudan rivit ja sarakkeet on molemmat esitetty numeroilla 1-8.
Funktiolle annetaan argumenttina hevosen nykyinen sijainti monikkona, esim.
(4, 4). Funktion pitää palauttaa lista ruuduista, joihin hevonen voi liikkua. Koska esimerkin ruutu on laudan keskellä, hevosen liikkumista ei rajoita mikään, ja näin ollen sen pitäisi palauttaa 8 ruutua seuraavasti:[(2, 3), (2, 5), (3, 2), (3, 6), (5, 2), (5, 6), (6, 3), (6, 5)]
Jos hevonen on ruudun reunan lähellä tai kulmassa, palautettujen ruutujen määrän tulee tietenkin olla pienempi.
Funktion nimen tulee olla hevosen_siirrot ja sillä on yksi parametri.
Tallenna koodi nimellä hevonen.py
Tallenna koodi nimellä hevonen.py
Voit testata ohjelmaasi annetulla testiohjelmalla, jos molemmat tiedostot ovat samassa kansiossa:
python hevonen_testi.pyNumeropeli¶
Eli numeron arvaus -peli. Tietokone on arponut luvun väliltä 1-100 ja pelaajan pitää arvata vihjeiden avulla mikä se on ennen kuin arvaukset loppuvat. Jokaisen arvauksen kohdalla tietokone kertoo, onko arvaus liian pieni vai liian iso. Tässä tehtävässä toteutetaan varsinainen pelaaminen.
Tehtävän funktion kuuluu pyörittää peliä silmukassa niin pitkään kuin arvauksia riittää tai pelaaja arvaa oikein. Arvausten määrä annetaan funktiolle argumenttina, samoin oikea luku. Joka kierroksella pyydetään pelaajalta luku, ja kerrotaan onko se oikein, liian pieni, tai liian iso. Jos pelaaja ei osaa syöttää kelvollista kokonaislukua, se lasketaan kuitenkin arvaukseksi.
Yksi pelikerta voi mennä siis esimerkiksi näin:
Arvaa numero: 50 Liian pieni luku Arvaa numero: 70 Liian pieni luku Arvaa numero: 90 Liian pieni luku Arvaa numero: 95 Liian suuri luku Arvaa numero: 93 Oikein! Voitit
Funktio palauttaa True jos pelaaja voittaa, muuten False.
Funktion nimen tulee olla arvaa. Sillä on kaksi parametria: arvausten lukumäärä ja oikea numero.
Anna koodin nimeksi numeropeli.py
Anna koodin nimeksi numeropeli.py
Voit testata ohjelmaasi annetulla testiohjelmalla, jos molemmat tiedostot ovat samassa kansiossa:
python numeropeli_testi.pyPakkausalgoritmi¶
Tässä tehtävässä toteutetaan hyvin yksinkertainen pakkausalgoritmi, joka pienentää sellaisten merkkijonojen kokoa, joissa toistuu paljon samoja merkkejä peräkkäin. Algoritmi muuttaa saamansa merkkijonon listaksi, jossa on kahdenlaisia alkioita: pelkkä merkki, jos sen perässä on heti eri merkki; tai monikko, jossa on merkki ja peräkkäisten samojen merkkien lukumäärä. Viimeinen merkki on aina rivinvaihto, joten sitä ei huomioida. Esimerkiksi merkkijonosta
"aaaaaaaaaaaceeeeeeeeeeeeeeeeeeeeedfghiiiiiiaaaaaa\n" tulisi lista:[('a', 11), 'c', ('e', 21), 'd', 'f', 'g', 'h', ('i', 6), ('a', 6)]
Tehtävä on siis koodata funktio, joka toteuttaa tämän pakkauksen. Funktion tulee palauttaa edellä esitetyn näköinen lista.
Funktion nimen tulee olla pakkaa ja sillä on yksi parametri, pakattava merkkijono.
Anna koodin nimeksi pakkaus.py
Anna koodin nimeksi pakkaus.py
Voit testata ohjelmaasi annetulla testiohjelmalla, jos molemmat tiedostot ovat samassa kansiossa:
python pakkaus_testi.py