keskiviikko 23. marraskuuta 2016

Syksyn deadline 11.12.2016 sunnuntaina klo 24

Syksyn kurssin arviointiin tulevien tehtävien on oltava siis palautettuna viimeistään

klo 24 sunnuntaina 11.12.2016

!!!

9. Pohdintaa

Viimeinen tehtävä on aika paha nakki...
Kirjoita blogiteksti, jossa otat kantaa seuraaviin asioihin:
  • Mikä on ollut tämän syksyn at:ssa vaikeaa?
  • Mikä on ollut tämän syksyn at:ssa mielenkiintoista?
  • Mikä on ollut tämän syksyn at:ssa kauheaa, vaikeaa, tylsää?
  • Mikä kiinnostaisi tutustumis-/opiskeluaiheena kevään kurssille? 

keskiviikko 16. marraskuuta 2016

8. Mediakritiikkiä

Lue Aamulehden 13.10.2015 artikkeli "Näin tunnistat onko uutinen totta vai tarua" (kaksi sivua A12 ja A13) ja sen jälkeen allaolevan ohjeen mukaan tutki kaksi liioittelevaa/täysin virheellistä uutista ja kirjoita raportti.
  1. Valitse A13 sivun Fakta-laatikon feikkisivusto-listasta jokin sivusto.
  2. Mene sivustolle ja etsi käsiisi jokin uutinen.
  3. Lue uutinen tarkasti ja "kriittisesti".
  4. Ota linkki uutiseen talteen ja näytönkaappauskuva näkymästä.
  5. Etsi oikeilta uutis- ja tietosivuilta asiaan liittyviä uutisia (linkit talteen).
  6. Toista kohdat 1-5 eli tutki vielä toinen kyseenalainen uutinen.
  7. Kirjoita Office365-wordillä kirjoitus, jossa "paljastat" totuuksia. Voit tehdä normaalin vertailevan tekstin tehostamiseksi myös esim. koontitaulukon, jossa on listattu "feikkifaktoja" ja toisessa sarakkeessa miten asia "oikeasti" on kahden tutkimasi uutisen tapauksessa.
  8. Keksi kirjoituksellesi mullistava otsikko tyyliin "Maa ei ole tiedemiesten mukaan litteä, mies putosi reunalta kuitenkin"
  9. Liitä kirjoitukseesi myös näytönkaappauskuvat uutisista.
  10. Loppuun lisää lähdeluettelo tietolähteistä, joita olet käyttänyt (katso vaikka Wikipediasta mallia, kuinka lähteet on merkattu).
  11. Jaa kirjoitus O365:ssä opettajalle ja tee blogiisi pikku raportti siitä, mitä uutista olet arvioinut ja liitä mukaan näytönkaappauskuvat uutisista.

torstai 3. marraskuuta 2016

7. Exceliä O365

Harjoitellaan taulukkolaskentaa. Käytämme harjoitukseen Office365:n Excel-sovellusta. Office365 ja Excel ovat käytettävissäsi Hakkarin koulun oppilaana, kun kirjaudut täältä. Huomaa, että Office365 ei toimi Chromella, joten käytä Firefoxia tai Internet Exploreria.

Tehtävänäsi laatia alla kuvassa näkyvän mukainen laskentataulukko ja korjata mallissa olevat XXXXXX-kohdat oikeiksi laskukaavoiksi tai teksteiksi. Laskettavia asioita ei siis lasketa laskimella tms. vaan teet laskukaavan soluun niin, että taulukkolaskentaohjelma laskee luvut puolestasi.


Ohjeita/vaatimuksia:
  • Täydennä kuukausien nimet kohdilleen - automaattinen täyttö nopeuttaa.
  • Muista, että laskentataulukon solussa kaavat alkavat aina merkillä "=".
  • Saat laskentakaavalla helposti laskettua summan kaikkien valitsemiesi solujen arvoista.
  • Voitto-riville laske kuukauden tulojen ja menojen erotus.
  • Keskiarvolle, pienimmälle("minimi") ja suurimmalle ("maksimi") arvolle löytyy myös omat funktiot.
  • Tulos-riville tarvitset JOS-funktiota, joka muuttaa solun arvoksi joko "Voitto!" tai "Tappio!" riippuen vastaavan voitto-rivin solun arvosta.
    • JOS-funktion toiminta: "=JOS(ehtolauseke; tosi; epätosi)" eli jos ehtolauseke toteutuu, tehdään "tosi" ja jos ehtolauseke ei toteudu niin tehdään "epätosi".
  • Muotoile myös reunuksia ja tekstin- ja soluvärityksiä tehosteiksi selventääksesi luettavuutta.
    • Yhteensä-rivit kannattaa saattaa erottuviksi, samoin erillinen tilastolaskelma, myös koko alkuvuoden tulosta kuvaavat yhteensä-solu ja sen tulos-teksti kannattanee korostaa.

Jaa valmis taulukko opettajalle O365:ssä "voi muokata"-muodossa ja ota näytönkuva taulukostasi blogia varten. Blogiin kirjoitat miten sujui, ja mikä oli vaikeaa. Kerro myös, mikä oli esimerkissä vuoden alkupuoliskon tulos ja oliko se voittoa vai tappiota. Liitä mukaan näytönkuva.

Tässä lähtötilannetta kuvastava taulukon kuva:

maanantai 3. lokakuuta 2016

6. Python V

Listojen avulla ohjelma voi käsitellä kätevästi suurta määrää tietoa. Esimerkiksi jos ohjelman muistissa ovat sadan käyttäjän nimet, niiden tallentaminen erillisiin muuttujiin nimi1, nimi2, nimi3, ..., nimi100 olisi hankalaa. Kun nimet ovat listassa, kaikkiin nimiin voi viitata helposti yhden muuttujan nimet kautta.
Listojen merkittävä etu on, että ohjelman rakenne pysyy samana, vaikka tiedon määrä olisi vaihteleva. Esimerkiksi nimien käsittelyssä samanlainen ohjelma kelpaa tilanteissa, joissa nimiä on viisi, sata ja miljoona. Lisäksi vaikka tiedon määrä olisi pieni, listat voivat selventää ohjelman rakennetta.
Lista on yleisin Python-kielen valmiista tietorakenteista ja soveltuu moniin ohjelmointitehtäviin. Lisää esimerkkejä listan sovelluksista tulee vastaan opassarjan myöhemmissä osissa.

Lista

Lista on muuttuja, joka sisältää kokoelman alkioita tietyssä järjestyksessä. Listassa olevat alkiot voivat olla esimerkiksi lukuja tai merkkijonoja.
Seuraavassa ohjelmassa on lista nimet, joka sisältää nimet Henrikki, Uolevi ja Antti. Ohjelma tulostaa ensin nimet yksi kerrallaan ja sitten uudestaan koko listan. Tämän jälkeen ohjelma muuttaa Uolevin nimeksi Einari ja tulostaa vielä koko listan.


Ohjelman tulostus on seuraava:
Ensin tulee Markus
Sitten on Mikael
Viimeisenä on Elisa
Tässä vielä koko joukko:
['Markus', 'Mikael', 'Elisa']
Toinen onkin Einari
Tässä vielä koko joukko:
['Markus', 'Einari', 'Elisa']
Listan luonnissa alkiot merkitään hakasulkujen sisään pilkuilla erotettuina. Tämän jälkeen alkioihin voi viitata kokonaisluvuin nollasta alkaen: tässä nimet[0] on ensimmäinen nimi, nimet[1] on toinen nimi ja nimet[2] on kolmas nimi. Listan koko sisällön voi tulostaa antamalla pelkän listan nimen print-komennolle.

Esimerkki: Kuukaudet

Yksi listan käyttötarkoitus on, että se toimii ohjelman tietovarastona. Seuraavassa ohjelmassa lista sisältää kuukausien nimet suomeksi, jolloin ohjelman on helppoa nimetä käyttäjän antama kuukausi.
Ohjelman tulostus voi olla seuraava:
Anna kuukausi (1-12): 9
Kuukauden nimi: syyskuu
Ohjelman toiminta perustuu siihen, että listan alkioon voi viitata muuttujan avulla. Listassa kuukausien numerointi alkaa nollasta, minkä vuoksi ohjelma pienentää yhdellä käyttäjän antamaa numeroa. Esimerkiksi jos käyttäjä antaa numeron 9, ohjelma hakee kuukauden nimen kohdasta lista[8].

Listassa oleminen

Totuusarvo alkio in lista on tosi, jos alkio on listassa. Vastaavasti totuusarvo alkio not in lista on tosi, jos alkio ei ole listassa. Seuraava ohjelma tulostaa eri viestin listassa oleville käyttäjille.
Tässä on ohjelman mahdollisia tulostuksia:
Anna nimi: Markus
Mitä uutta, kuoma?

Anna nimi: Sakke
Et kuulu sisäpiiriin!
Jos nimi on Markus, Mikko tai Aino, ohjelma tulostaa viestin "Mitä uutta, kuoma?". Muuten ohjelma tulostaa viestin "Et kuulu sisäpiiriin!".

Alkion lisääminen

Listaan voi lisätä alkioita metodilla append. Seuraavassa esimerkissä lista on aluksi tyhjä ja ohjelma lisää siihen käyttäjän antamia sanoja. Ohjelma päättyy, kun käyttäjä antaa saman sanan uudestaan.
Ohjelman tulostus voi olla seuraava:
Kirjoita sana: talo
Kirjoita sana: metsä
Kirjoita sana: auto
Kirjoita sana: tie
Kirjoita sana: metsä
Kirjoitit saman sanan uudestaan!
Kirjoitit sanat: ['talo','metsä','auto','tie']

Listan läpikäynti

Listassa olevat alkiot voi käydä läpi for-silmukalla. Silmukalle annetaan muuttuja ja lista, jonka jälkeen muuttujan arvo on silmukan joka kierroksella vuorollaan yksi listan alkioista.
Seuraava ohjelma tulostaa kaikkien viikonpäivien nimet:
Ohjelman tulostus on seuraava:
maanantai
tiistai
keskiviikko
torstai
perjantai
lauantai
sunnuntai
 
Seuraava ohjelma kysyy käyttäjältä sanoja, kunnes käyttäjä antaa tyhjän sanan. Sitten ohjelma tulostaa sanojen määrän ja kaikki sanat.
Ohjelman tulostus voi olla seuraava:
Kirjoita sana: apina
Kirjoita sana: banaani
Kirjoita sana: cembalo
Kirjoita sana:
Kirjoitit 3 sanaa.
Sanat ovat:
apina banaani cembalo
Tässä funktio len kertoo, kuinka monta alkiota listassa on.

Listan metodit

Listaan liittyvät mm. seuraavat metodit:
metodiselitys
lista.append(alkio)lisää alkion listaan (tämä on jo tuttu)
lista.index(alkio)etsii alkion kohdan listassa
lista.count(alkio)laskee alkion esiintymiskerrat listassa
lista.remove(alkio)poistaa alkion listasta
lista.sort()järjestää listan alkiot
lista.reverse()kääntää listan toisinpäin
Seuraava ohjelma etsii listasta käyttäjän antaman kuukauden:


Ohjelman tulostus voi olla seuraava:
Anna kuukauden nimi: syyskuu
Kuukauden numero: 9
Tällä kertaa kuukauden kohtaan listassa pitää lisätä yksi, jotta tuloksena on tuttu kuukauden numero. Esimerkiksi jos kuukausi on syyskuu, se on listassa kohdassa lista[8] ja ohjelma ilmoittaa numeroksi 9.

Esimerkki: Presidentit

Seuraava ohjelma tarkistaa, kuinka monta presidenttiä käyttäjä muistaa:
Ohjelman tulostus voi olla seuraava:
Kuinka monta presidenttiä muistat?
Nimi: Kekkonen
Oikein!
Nimi: Virtanen
Ei kelpaa!
Nimi: Halonen
Oikein!
Nimi: Kekkonen
Ei kelpaa!
Nimi: Mannerheim
Oikein!
Nimi:
Muistit 3 presidenttiä!
Ohjelman alussa lista sisältää kaikkien presidenttien nimet. Aina kun käyttäjä muistaa presidentin, ohjelma poistaa sen listasta. Tämän ansiosta käyttäjä ei voi kerätä pisteitä antamalla saman nimen monta kertaa. Ohjelma päättyy, jos käyttäjä antaa tyhjän nimen tai muistaa kaikki nimet.

Esimerkki: Lukutilasto

Seuraava ohjelma lisää käyttäjän antamia lukuja listaan, kunnes käyttäjä antaa luvun nolla. Sitten ohjelma ilmoittaa listan pienimmän ja suurimman luvun, listan lukujen summan sekä järjestyksessä kaikki eri luvut esiintymiskertoineen.
Ohjelman tulostus voi olla seuraava:
Kirjoita luku: 5
Kirjoita luku: 3
Kirjoita luku: 5
Kirjoita luku: 8
Kirjoita luku: 2
Kirjoita luku: 2
Kirjoita luku: 5
Kirjoita luku: 0
Pienin luku: 2
Suurin luku: 8
Lukujen summa: 30
Luku 2 on listassa 2 kertaa.
Luku 3 on listassa 1 kertaa.
Luku 5 on listassa 3 kertaa.
Luku 8 on listassa 1 kertaa.
Funktiot min, max ja sum kertovat listan pienimmän luvun, suurimman luvun ja lukujen summan. Ohjelma käy lopuksi läpi kaikki luvut mutta tulostaa jokaisen eri luvun vain kerran. Tämän vuoksi ohjelma pitää muistissa muuttujassa vanha edellisen kierroksen lukua.

keskiviikko 28. syyskuuta 2016

5. Python IV

Toistorakenteet

Ehtorakenteiden avulla ohjelma voi suorittaa valikoivasti koodirivejä, mutta ohjelman suoritus etenee silti koko ajan rivejä alaspäin. Toistorakenteet antavat ohjelmalle mahdollisuuden suorittaa samoja rivejä monta kertaa peräkkäin. Nyt jos ohjelman täytyy tehdä monta kertaa sama asia, tarvittava koodi riittää kirjoittaa kerran.
Python-kielen toistorakenteet ovat while-silmukka, jossa ohjelma toistaa samaa koodia niin kauan, kuin jokin ehto on voimassa, sekä for-silmukka, jossa ohjelma käy läpi joukon tietoja ja suorittaa jokaisen kohdalla saman koodin. Tämä opas esittelee molemmat toistorakenteet, vaikka for-silmukka pääsee täysiin oikeuksiinsa vasta seuraavissa oppaissa listojen ja merkkijonojen käsittelyssä.

while-silmukka

Seuraava ohjelma kysyy käyttäjältä tunnussanaa, kunnes käyttäjä antaa oikean tunnussanan "python".

Ohjelman tulostus voi olla seuraava:
Kirjoita tunnussana: kissa
Kirjoita tunnussana: putka
Kirjoita tunnussana: python
Tervetuloa!
Ohjelmassa on while-silmukka, jonka alussa on totuusarvomuotoinen ehto. Tässä ehto sana != "python" tarkoittaa, että ohjelma toistaa silmukkaa niin kauan, kuin tunnussana ei ole oikein. Jokaisella silmukan kierroksella ohjelma kysyy käyttäjältä tunnussanaa, ja kun käyttäjä antaa oikean tunnussanan, silmukan ehto ei ole enää voimassa ja silmukka päättyy.
Esimerkissä ohjelman suoritus etenee seuraavasti:
  1. Muuttuja sana saa alkuarvon "".
  2. Ohjelma saapuu silmukkaan.
  3. Ehto sana != "python" pätee ja ohjelma suorittaa silmukan koodin.
  4. Silmukassa sana saa arvon "kissa".
  5. Ohjelma palaa silmukan alkuun.
  6. Ehto sana != "python" pätee ja ohjelma suorittaa silmukan koodin.
  7. Silmukassa sana saa arvon "putka".
  8. Ohjelma palaa silmukan alkuun.
  9. Ehto sana != "python" pätee ja ohjelma suorittaa silmukan koodin.
  10. Silmukassa sana saa arvon "python".
  11. Ohjelma palaa silmukan alkuun.
  12. Ehto sana != "python" ei päde ja silmukka päättyy.

for-silmukka

Seuraava ohjelma tulostaa lukujen 0–9 neliöt eli luvut korotettuna toiseen potenssiin. Esimerkiksi luvun 5 neliö on 25, koska 52 = 5 * 5 = 25.
Ohjelman tulostus on seuraava:
Luvun 0 neliö on 0
Luvun 1 neliö on 1
Luvun 2 neliö on 4
Luvun 3 neliö on 9
Luvun 4 neliö on 16
Luvun 5 neliö on 25
Luvun 6 neliö on 36
Luvun 7 neliö on 49
Luvun 8 neliö on 64
Luvun 9 neliö on 81
Ohjelmassa on for-silmukka, joka käy läpi joukon tietoja ja suorittaa joka tiedon kohdalla saman koodin. Tässä range(10) tarkoittaa, että silmukka käy läpi kymmenen ensimmäistä kokonaislukua nollasta alkaen. Jokaisella silmukan kierroksella muuttuja i saa arvokseen käsiteltävän kokonaisluvun.
Esimerkissä ohjelman suoritus etenee seuraavasti:
  1. Muuttuja i saa arvon 0.
  2. Ohjelma suorittaa silmukan sisällä olevan koodin.
  3. Muuttuja i saa arvon 1.
  4. Ohjelma suorittaa silmukan sisällä olevan koodin.
  5. Muuttuja i saa arvon 2.
  6. Ohjelma suorittaa silmukan sisällä olevan koodin.
  7. (jne.)
Lukuväliin liittyy kolme parametria: mistä luvusta silmukka alkaa, minkä luvun kohdalla silmukka päättyy ja kuinka paljon luku kasvaa silmukan kierroksen jälkeen. Oletuksena silmukka alkaa nollasta ja luku kasvaa yhdellä kierroksen jälkeen. Seuraavassa on esimerkkejä lukuväleistä:
merkintälukuväli
range(10)0, 1, 2, 3, 4, 5, 6, 7, 8, 9
range(5, 15)5, 6, 7, 8, 9, 10, 11, 12, 13, 14
range(-6, 3)-6, -5, -4, -3, -2, -1, 0, 1, 2
range(24, 16, -1)24, 23, 22, 21, 20, 19, 18, 17
range(3, 20, 2)3, 5, 7, 9, 11, 13, 15, 17, 19
range(35, 4, -4)35, 31, 27, 23, 19, 15, 11, 7
Opassarjan seuraavissa osissa nähdään, mitä muuta for-silmukalla voi tehdä kuin käydä läpi lukuvälejä.

Keskeytys

Tunnussanan kysymisen voi toteuttaa myös seuraavasti:


Tässä silmukan alussa on ehto True, joka on aina tosi eikä rajoita silmukan toistamista. Kuitenkin silmukan sisällä komento break keskeyttää silmukan, jos käyttäjä antaa oikean tunnussanan. Silmukan toimintatapa on siis ennallaan, mutta ehdon sijainti poikkeaa aiemmasta.
Komentoa break voi käyttää kaikissa silmukoissa: while-silmukassa se keskeyttää silmukan, vaikka alkuehto olisi voimassa, ja for-silmukassa se keskeyttää silmukan, vaikka kaikkia tietoja ei olisi vielä käsitelty.

Uusi kierros

Seuraava ohjelma tulostaa parittomien lukujen neliöitä:
 Ohjelman tulostus on seuraava:
Luvun 1 neliö on 1
Luvun 3 neliö on 9
Luvun 5 neliö on 25
Luvun 7 neliö on 49
Luvun 9 neliö on 81
Tässä silmukan sisällä on komento continue, joka siirtyy silmukassa uudelle kierrokselle, jos käsiteltävä luku on parillinen. Komennon vaikutuksesta silmukan loppuosa jää suorittamatta, jos luku on parillinen, eli silmukka tulostaa vain parittomien lukujen neliöt.
Komentoa continue voi käyttää kaikissa silmukoissa: while-silmukassa se palaa silmukan alkuun ehdon tarkistukseen, ja for-silmukassa se palaa silmukan alkuun ja siirtyy seuraavan tiedon käsittelyyn.

Esimerkki: Suorakulmiot

Seuraava ohjelma tulostaa suorakulmioita käyttäjän ohjeiden mukaisesti:
Ohjelman tulostus voi olla seuraava:
Korkeus: 4
Leveys: 5
*****
*****
*****
*****
Haluatko jatkaa (k/e)? k
Korkeus: 2
Leveys: 10
**********
**********
Haluatko jatkaa (k/e)? k
Korkeus: 6
Leveys: 3
***
***
***
***
***
***
Haluatko jatkaa (k/e)? e
Ohjelman pääsilmukka on while-silmukka, jonka jokaisella kierroksella ohjelma tulostaa yhden suorakulmion for-silmukan avulla. Ensimmäinen for-silmukka tulostaa yhden suorakulmion rivin, ja toinen for-silmukka tulostaa yhden rivillä olevan merkin.

Esimerkki: Luvun tekijät

Luvun jakaminen tekijöihin tarkoittaa, että luku esitetään kertolaskuna, jossa olevia lukuja (tekijöitä) ei voi enää jakaa osiin. Toisin sanoen luku esitetään alkulukujen tulona. Esimerkiksi luvun 15 tekijät ovat 3 ja 5, koska 3 * 5 = 15, ja luvun 44 tekijät ovat 2, 2 ja 11, koska 2 * 2 * 11 = 44. Luku 31 on alkuluku, joten sitä ei voi jakaa osiin.
Seuraava ohjelma jakaa annetun luvun tekijöihin:
Seuraavassa on muutamia ohjelman tulostuksia:
Anna luku: 15
3 * 5

Anna luku: 44
2 * 2 * 11

Anna luku: 31
31
Ohjelma käy läpi mahdollisia luvun tekijöitä 2:sta alkaen. Jokaisen tekijän kohdalla luku jaetaan tekijällä ja tekijä tulostetaan, kunnes luku ei ole enää jaollinen tekijällä. Ohjelma päättyy, kun kokeiltava tekijä on lukua suurempi. Käytännössä tällöin luku on jakolaskujen seurauksena 1.

Esimerkki: Viljanjyvät

Tarinan mukaan shakkipelin keksijä pyysi palkkiokseen yhden viljanjyvän shakkilaudan ensimmäiseen ruutuun, kaksi toiseen ruutuun, neljä kolmanteen ruutuun, kahdeksan neljänteen ruutuun jne., siis joka ruutuun kaksinkertaisen määrän jyviä edelliseen ruutuun verrattuna.
Seuraava ohjelma laskee, kuinka monta viljanjyvää shakkilaudan kuhunkin ruutuun tulisi ja kuinka monta viljanjyvää shakkilaudalla olisi yhteensä.
 Ohjelman tulostus on seuraava:
Ruudussa 1 on 1 jyvää
Ruudussa 2 on 2 jyvää
Ruudussa 3 on 4 jyvää
Ruudussa 4 on 8 jyvää
... (välissä rivejä)
Ruudussa 61 on 1152921504606846976 jyvää
Ruudussa 62 on 2305843009213693952 jyvää
Ruudussa 63 on 4611686018427387904 jyvää
Ruudussa 64 on 9223372036854775808 jyvää
Yhteensä 18446744073709551615 jyvää
Shakkipelin keksijän palkkiota ei pystytty koskaan maksamaan, koska koko maailmassa ei ole näin monta viljanjyvää.

torstai 15. syyskuuta 2016

4. Python III

Totuusarvo

Totuusarvo on joko tosi (True) tai epätosi (False): jokin asia pitää paikkansa tai ei pidä paikkaansa. Esimerkiksi "pistemäärä on yli 1000" ja "pelaajan nimi ei ole Einari" vastaavat totuusarvoja, jotka voivat olla ohjelman yhdellä suorituskerralla tosia ja toisella suorituskerralla epätosia. Jos pelaajalla on 1500 pistettä ja hänen nimensä on Einari, ensimmäinen totuusarvo on tosi mutta toinen totuusarvo on epätosi.
Totuusarvoja tuottavat vertailut, joissa tarkistetaan, ovatko kaksi lukuarvoa tai merkkijonoa samat tai mikä on niiden suuruusjärjestys tai aakkosjärjestys:
vertailumilloin tosi?
X == YX on sama kuin Y
X != YX ei ole sama kuin Y
X < YX on pienempi kuin Y
X <= YX on pienempi tai sama kuin Y
X > YX on suurempi kuin Y
X >= YX on suurempi tai sama kuin Y
Merkinnän != sijasta voi käyttää myös merkintää <>. Jos vertailussa ovat lukuarvot, "pienempi" ja "suurempi" tarkoittavat lukujen suuruusjärjestystä. Jos vertailussa ovat merkkijonot, "pienempi" ja "suurempi" tarkoittavat merkkijonojen aakkosjärjestystä, joka riippuu siitä, missä järjestyksessä merkit ovat käytetyssä merkistössä.


  • Anna muuttujille "nimi" ja "vuosi" eri arvot ja tulosta totuusarvoja erilaisista vertailuista. Kts. koodi lopussa.
Koodissa vertailut nimi != "Antti", vuosi >= 1672 ja nimi > "Antti" ovat tosia, koska nimi ei ole Antti, vuosi on ainakin 1672 ja nimi on aakkosissa Antin jälkeen. Vertailut vuosi == 1726 ja vuosi < 1600 ovat epätosia, koska vuosi ei ole 1726 ja vuosi ei ole myöskään alle 1600.
Useamman vertailun voi tehdä myös peräkkäin, jolloin tulos on tosi, jos kaikki yksittäiset vertailut toteutuvat.

  • Anna muuttujille a ja b arvot ja vertaile niitä vertailuilla seuraavasti 0 < 1 < 2 on tosi, koska 0 < 1 on tosi ja 1 < 2 on tosi. Vertailu a < b < 1 on epätosi, koska b < 1 on epätosi. Vertailu a < b == 0 on tosi, koska a < b on tosi ja b == 2 on tosi. (Kts.koodi)

Ehtorakenne

Ehtorakenne muuttaa ohjelman suoritusta sen mukaan, onko jokin totuusarvo tosi vai epätosi eli pitääkö jokin ehto paikkansa vai ei. Seuraava ohjelma tervehtii käyttäjää vain, jos hänen nimensä on  Ehtorakenteen aloittaa if-sana, jonka jälkeen tulee totuusarvomuotoinen ehto. Jos ehto on tosi, ohjelma suorittaa ehtorakenteen sisällä olevat rivit. Muuten ohjelma hyppää ehtorakenteen yli. Tässä ehto on tosi, jos nimi on Henrikki, ja muuten epätosi.'
  • Tee ohjelma, joka tervehtii käyttäjää vain jos hänen nimensä on Henrikki.
Erilaiset tulostukset voisivat olla:
Nimi: Antti
Ei muuta...
Nimi: Henrikki
Hoi, sankari!
Minne matka?
Ei muuta...

Python tunnistaa ehtorakenteen sisällä olevat rivit siitä, että ne on sisennetty eli niiden edessä on ylimääräistä tyhjää. Ohjelmoijan päätettävissä on, kuinka paljon tyhjää rivien edessä on, kunhan kaikkien ehtorakenteessa olevien rivien edessä on yhtä paljon tyhjää.

Lisää ehtoja

Seuraava ohjelma tervehtii Henrikkiä eri tavoin kuin muita. Ohjelma sanoo Henrikille "Hoi, sankari!" ja kaikille muille "Hellurei!". Nyt ehtorakenteen loppuun lisätään else-osa, jonka ohjelma suorittaa, jos alussa oleva ehto ei ole tosi.

Tässä ovat ohjelman erilaiset tulostukset:
Nimi: Henrikki
Hoi, sankari!

Nimi: Antti
Hellurei!

Sitten ehtorakenteen laajin muoto: Ohjelma suorittaa ensimmäisen if- tai elif-osan, jota vastaava ehto on tosi. Jos mikään ehto ei ole tosi, ohjelma suorittaa else-osan.
  • Seuraava ohjelma tekee omat tervehdykset Henrikille, Antille ja Uoleville. Kaikkia muita ohjelma tervehtii samalla tavalla. 
Tässä ovat ohjelman erilaiset tulostukset:
Nimi: Henrikki
Hoi, sankari! 
Nimi: Antti
Morjens! 
Nimi: Uolevi
Tsaukki! 
Nimi: Justiina
Hellurei!
Ehtorakenteesta voi aina puuttua else-osa, jolloin ohjelma ei tee mitään, jos mikään ehto ei ole tosi.

Totuusarvojen yhdistys

Totuusarvoja voi yhdistää toisiinsa seuraavin merkinnöin:
yhdistysmilloin tosi?
A and B    A on tosi ja B on tosi
A or BA on tosi tai B on tosi
not AA ei ole tosi
Ehtorakenteessa yhdistyksen and avulla voi tarkistaa, päteekö monta ehtoa yhtä aikaa, ja yhdistyksen or avulla voi tarkistaa, päteekö ainakin yksi ehdoista.
  • Seuraavan ohjelman pitäisi tarkistaa, ovatko käyttäjän tunnus ja salasana oikein: Ohjelma tulostaa "Oikein!", jos tunnus on "antti" ja salasana on "abc".
  • Seuraavaksi tee ohjelma, joka tarkistaa käyttäjän iän ja tulostaa "Mahdotonta!", jos käyttäjä on alle 0 vuotta tai yli 120 vuotta.

Jos totuusarvo on monimutkainen, sulkujen avulla voi varmistaa, että Python tulkitsee sen oikein. Esimerkiksi on vaikeaa tietää, miten Python tulkitsee totuusarvon tunnus == "antti" and salasana == "abc" or suojaus == 0. Sulkujen avulla pystyy erottamaan mahdolliset tulkinnat:
  1. (tunnus == "antti" and salasana == "abc") or suojaus == 0
  2. tunnus == "antti" and (salasana == "abc" or suojaus == 0)
Ensimmäisessä tapauksessa riittää, että tunnus ja salasana ovat oikein tai suojaus on 0. Toisessa tapauksessa ensinnäkin tunnuksen täytyy olla oikein ja lisäksi salasanan täytyy olla oikein tai suojauksen täytyy olla 0.

Tietokilpailu

  • Tee tietokilpailupeli, joka kysyy käyttäjältä kysymyksiä. Jokaisesta oikeasta vastauksesta saa pisteen, ja ohjelma ilmoittaa lopuksi pistemäärän.
Ohjelmassa muuttuja pisteet on laskurimuuttuja, jonka arvo on aluksi nolla ja jonka arvo kasvaa yhdellä aina, kun käyttäjä vastaa kysymykseen oikein.
Lyhennys pisteet += 1 tarkoittaa samaa kuin pisteet = pisteet + 1.
Vastaavaa merkintää voi käyttää myös muiden laskutoimitusten kanssa.
Ohjelman tulostus voisi olla seuraava:

Tervetuloa tietokilpailuun!
Kuinka monta sekuntia on tunnissa?
3600
Oikein!
Minä vuonna J. Sibelius kuoli?
1957
Oikein!
Mikä on Bulgarian pääkaupunki?
Plovdiv
Väärin!
Peli loppui!
Pisteet: 2

Arvaaja

  • Tee ohjelma, joka arvaa käyttäjän ajatteleman viikonpäivän. Ohjelma kysyy korkeintaan kolme kyllä/ei-kysymystä.

Ohjelman tulostus voi olla seuraava:

Ajattele jotain viikonpäivää!
Onko viikonpäivän nimessä n-kirjain (k/e)? e
Onko viikonpäivän nimessä k-kirjain (k/e)? e
Onko viikonpäivän nimessä r-kirjain (k/e)? k
Viikonpäivä on torstai!
 
Ohjelman toiminta perustuu seuraavaan päättelykaavioon:



Ohjelma sisältää paljon sisäkkäisiä ehtorakenteita, joissa liikutaan sen mukaan, mitä vastauksia käyttäjä antaa kysymyksiin. Ohjelman täytyy tulostaa monessa kohdassa melkein samanlainen kysymys, minkä vuoksi kysymyksen alkuosa ja loppuosa haetaan muuttujista. Kuten ohjelmasta näkyy, input-funktion tulos voi olla suoraan osana ehtoa.






torstai 8. syyskuuta 2016

3. Python II

Yritä tehdä seuraavien ohjeistusten (ja opettajan tunnin alun ohjeiden mukaan) avulla koodit jotka tekevät pyydetyt asiat. Tee kaikki yhteen ja samaan python-tiedostoon. Lopuksi ota vielä viimeisestä ohjelman suorituksesta ruudunkaappauskuva suoritusikkunasta ja jaa se blogiisi. Python-kooditiedosto OneDrive-kansioonsa.


Näytölle tulostaminen
  • Komennolla print tulostetaan näytölle
  • Esim. print("Tämä tulostuu!")
  • Tee koodi, joka tulostaa "Ohjelmointi on hauskaa!"
  • Tee toinen koodi, jossa annat muuttujille lukuarvot ja viime tunnin ohjeiden mukaan tulostat lukujen arvot.
  • Tee kolmas koodi, jossa annat muuttujille lukuarvot ja tulostat luvut ja lukujen summan.

Näppäimistön lukeminen
  • Komennolla input voi pyytää käyttäjää antamaan tietoja ohjelmalle
  • Vastaus palautetaan aina merkkijonona, vaikka käyttäjä antaisikin luvun
  • Tee koodi, joka kysyy käyttäjän nimen ja tulostaa "Hei NIMI"


Tyyppimuunnokset
  • input-käsky palauttaa käyttäjän syötteen aina merkkijonona, joten ennen kuin käyttäjältä saatuja tietoja voi käyttää laskutoimituksissa, tulee tehdä tyyppimuunnos merkkijonosta luvuksi
  • float on desimaaliluku ja int kokonaisluku
  • Tee koodi joka kysyy luvun ja tulostaa luvun kaksinkertaiseksi kerrottuna


Vakiot
  • Vakio on ohjelmassa kiinteästi määritelty arvo, jolle on annettu sitä kuvaava nimi eikä sen arvoa muuteta.
  • Vakiot tekevät koodista helpommin ymmärrettävää.
  • Sen sijaan, että kirjoittaisi saman lukuarvon useaan kohtaan koodia, voi käyttää vakion nimeä.
  • Vakioiden nimet kirjoitetaan isoilla kirjaimilla.
  • Esim. KILOHINTA
  • Tee koodi, joka saa vakiona kilohinnan ja pakkauskulut ja kysyy painon. Tulosteena koodi antaa tuotteen hinnan (paino*kilohinta+pakkauskulut).

Luovuutta!
  • Nyt kokeile luoda jokin yksinkertainen tuotos itse. 
  • Ohjelman pitäisi kysyä käyttäjältä jotakin lukua ja merkkijonoa ja tulostaa niitä tai niiden kerrannaisia. Käytä myös vakioita.

Alla kuvassa on yhdenlaiset mallisuoritukset, omien koodiesi ei tarvitse olla täsmälleen samanlaiset, mutta kuvan koodi voi antaa vinkkejä suoritukseen.



torstai 1. syyskuuta 2016

2. Python I

Aloitetaan Python-koodausta.

Käynnistä IDLE opettajan ohjeiden mukaan. Jos teet tätä kotona niin englanninkieliset ohjeet asennukseen ja aloitukseen löytyy (esim. täältä luvusta 1) ja itse asennuspaketti löytyy (täältä).

Aloitetaan testailu.
Kokeile Pythonin komentorivillä erilaisia laskutoimituksia kirjoittamalla lasku ja painamalla enter, esim.

  • 1+2
  • 3*4
  • 15/3
  • 15/5+2*5
Sitten kokeile antaa jollekin muuttujalle arvo ja käyttää sitä, testaile esim. seuraavia syötteitä
  • luku=10
  • luku
  • luku*3
  • luku*2+luku/5
  • luku
  • luku=13
  • luku

Huomasit, että kun annat muuttujalle uudelleen arvon, vaihtuu muuttujassa oleva arvo uudeksi.
Testaapa seuraavia ja mieti mitä tapahtuu...
  • luku=5
  • luku=luku+5
  • luku=luku*10
  • munat=3
  • pekoni=5
  • makkara=2
  • munakas=munat+pekoni+makkara

Osaatko arvata mitä tulee tulostukseksi nyt kun kirjoitat
  • luku
  • munakas
Seuraavaksi onkin aika sitten testailla tekstin kanssa. Merkkijono (string) annetaan Pythonissa heittomerkkien välissä. Tekstijonoja voidaan liittää toisiinsa, käyttää muuttujissa ja kun otetaan vielä mukaan tekstiä tulostava print-käsky niin voidaan liittää tulostukseen muutakin. Testaapa...
  • 'Testinki!'
  • 'Testaaminen ' + 'on tylsää!'
  • lause='Tämä on päälause'
  • konjunktio=', johon'
  • sivulause=' voidaan liittää sivulause.'
  • virke=lause+konjunktio+sivulause
  • virke
  • print('Tässä luku ',pekoni,' voidaan laskea yhteen luvun ',8,' kanssa ja tulokseksi saadaan ',pekoni+8,'!')
Ota nyt ruudunkaappaus/näytönkuva "Python 3.5.2 Shell"-ikkunasta. Valitsemalla se aktiiviseksi ja painamalla alt+printscreen.
Liitä kuva blogiisi ja kirjoita saatteeksi pari sanaa siitä miltä Python vaikuttaa.
Tee Office365-OneDriveesi itsellesi Python-koodeja varten kansio, anna nimeksi vaikka "omanimi_pythonit". Jaa kansio opettajalle. Jatkossa kaikki Python-koodaukset tallennetaan tuohon kansioon ja ne ovat kerralla kaikki opettajan saatavilla kun kansio on jaettuna.


torstai 18. elokuuta 2016

1. Musisointia

Kaikilla varmaankin on edellisvuodelta tallessa gmail-/google-tunnukset ja bloggerin käyttö on hallussa. Mutta koska aloitetaan puhtaalta pöydältä niin aluksi ohje.
Arvosteluperiaatteet ja toimintatavat ovat samansuuntaiset kuin viime vuonna. Tehkää siis töitä ja pyrkikää huolellisuuteen. Lukekaa tehtävänannot tarkasti ja tehkää kaikki vaadittu. Tärkeintä on, etttä saatte palautuksia aikaan.

Aloitetaan luomalla vuoden blogi
  1. Kirjaudu Bloggeriisi Google-tunnuksellasi (Mikäli tunnukset ovat hukassa/kateissa, avaa ne uudelleen tai tee uudet).
  2. Luo uusi blogi tätä vuotta varten.
    1. Anna blogille otsikko ja osoite.
    2. Jos haluat voit blogin luomisen jälkeen tehdä blogista salaisen niin että se näkyy vain sinulle ja opettajalle.
    3. Blogin asetuksista -> Blogin lukijat -> muokkaa -> vain nämä lukijat -> lisää opettajan sähköpostiosoite lukijalistalle. 
    4. Laita opettajalle tavallinen sähköposti, josta ilmenee oikea nimesi, sähköpostiosoitteesi ja tämänvuotisen blogisi osoite.
Ja sitten ekan tehtävän pariin...

Musisoidaan!
  1. Suuntaa osoitteeseen http://soundation.com ja luo sinne ilmainen tunnus itsellesi/käytä Google tunnustasi. Kokeile editoida musiikkipätkä (n. pari minuuttia) tarjolla olevilla ilmaisilla sampleilla. (Premium-äänet ovat maksaville asiakkaille.). Soundation tarjoaa myös mahdollisuuden tehdä omia sävelaiheita kosketintyylisesti. Kokeilemalla oppii soundationin parissa kivasti. Lisää ääniraitoja tarvittava määrä ja laita esim. rumpukomppi jollekin raidalle ja tehosteääniä toiselle, mielikuvitus laukkaamaan.
  2. Tallenna välillä tuotostasi.
  3. Kun teos on valmis, löydät File-valikon alta vaihtoehdon musiikkiteoksesi julkaisuun "export as wav-file" on hyvä vaihtoehto.
  4. Testaa äänitiedoston toimivuus.
  5. Project-välilehdellä näkyy käyttämäsi samplet Ota sopiva näytönkaappauskuva ohjelmasta.
  6. Seilaa osoitteeseen http://www.online-convert.com/ ja valitse äänitiedoston kohdetyypiksi mp3.
  7. Muunna musiikkitiedostosi mp3-tiedostoksi.
  8. Lataa "ämpärisi" DropBoxiisi tai OneDriveesi.
  9. Tee tiedostollesi jakolinkki, eli jaa tiedostoasi linkin avulla.
  10. Kirjoita blogiisi teksti, jossa kommentoit soundationia ja johon liität soundationista ottamasi kuvan sekä myös tiedostonjakolinkin mp3-tiedostoosi.