Python-koodaus: Muuttujat PUNOMO NETWORKS OY 24.7 && 4.8.2016 pva Oletus Sinulla on Raspin Geany-IDE konfiguroituna toimimaan SSH-etäkäytössä. Tämä on Punomon Python koodikoulun toinen oppitunti. Käynnistä Mint-koneessa Terminal-ohjelma. Anna komento: ssh X pi@<koneesi IP osoite> geany Komento käynnistää Raspi-koneessa Geanyn ja kaappaa sen verkon kautta Mintin ruutuun. Muuttuja, variable Tietokone tekee monenlaisia asioita ohjelman ohjaamana; esim. se lukee lämpötila-anturin arvoja, muuttaa laskemalla sen arvon Celsius-asteiksi, vertaa sitä ennalta annettuun raja-arvoon ja jos arvo ylittää sen, kytkee transistorikytkimen kautta tuulettimen moottorin pyörimään. Näiden tehtävien suorittamiseen tietokone tarvitsee ohjelmakoodin lisäksi tietoa, dataa eli numeroita ja merkkejä ja vielä paikan jonne data tallennetaan. Työstettävälle tiedolle pitää olla jokin varastopaikka ja sehän on tietokoneen käyttömuisti, RAM (Random Access Memory). Datatieto voi olla joko pysyvää tai muuttuvaa. Toiset tiedot muuttuvat ja niitä on voitava muuttaa milloin tahansa ohjelman aikana. Luetaan vaikkapa lämpötilatieto kerran minuutissa. Muuttuvat tiedot tallennetaan muuttujiin. Muuttujat ovat tiedon tallennukseen varattuja käyttömuistin (RAM) lokeroita, joihin voi tallettaa ohjelmassa tarvittavia lukuarvoja, numeroita, merkkejä jne. Muuttujan arvo muuttuu, tai saattaa muuttua, ohjelman ajon aikana. Numeerinen muuttuja, numeroita joita voidaan käyttää laskutoimituksiin. Merkkijonomuuttuja, nimensä mukaan sisältää merkkejä, siis tekstiä. Kun muuttuja otetaan käyttöön, sitä ei Pythonissa erikseen esitellä, vaan annetaan sille nimi ja samalla annetaan ensimmäinen arvo. Tuo arvo määrää muuttujan tyypin automaattisesti, erillistä määritystä siihen ei tarvita. Jos alkuarvolla ei ole merkitystä, niin silloin sille annetaan arvo nolla. Muuttujan määritys varaa tilaa muuttujalle RAM-muistista ja yhdistää nimen varattuun tilaan. Muistipaikan koko ja se mitä muuttujalle voidaan tehdä, määräytyy tietotyypin perusteella. Muuttujat ovat olennaisia asioita kaikissa ohjelmointikielissä. Me kun tullaan tekemään laiteläheistä koodia, tutkitaan muistin rakenne oikein perusteellisesti jotta käsite muuttuja - muistipaikka selviää, kts tämän dokumentin viimeinen sivu. Ohjeita muuttujan nimeämiseen: Nimen kelvolliset merkit ovat a - z, A - Z, numerot ja alaviivat. Et saa käyttää öökkösiä, eli skandinaavisia ä, ö eikä å. Ensimmäinen merkki on oltava kirjain, mieluusti pieni. Python ymmärtää isot ja pienet kirjaimet eri merkeiksi. Ole niissä tarkkana. Käytä muuttujien nimissä mieluusti vain pieniä kirjaimia. Välilyönti (tyhjä paikka) ei ole sallittu. 1
Alaviivaa _ käytetään jos nimi on kaksiosainen, kuten oma_nimi, ovi_kytkin. Muuttujan nimenä kannattaa käyttää jotain sen merkitystä tai tehtävää kuvaavaa nimeä. Jos esim. muuttujaan tallennetaan virta-arvoja, kannattaa antaa muuttujalle nimi virta, tasavirta, kollektorivirta. Vältä käyttämästä muuttujan nimenä pelkkää kirjainta. Hyvin valittu nimi on kuin ylimääräinen kommenttirivi, se kertoo heti lukijalle mistä on kysymys. Tietotyypit: numerotyypit Tietotyypit Toiminto Miten käytetään Integer, int, kokonaisluku tallentaa kokonaislukuja 1, 222, 333 Long, pitkä kokonaisluku suuri kokonaisluku Float, liukuluku, desimaaliluku tallentaa desimaalilukuja 3.14, 5.55, 66.777 Operaattorit Operaattori Nimi Selite Esim. = sijoitus sijoittaa arvon muuttujalle luku=3, sijoittaa lukumuuttujan arvoksi 3 + plus yhteenlasku 2+4 antaa arvon 6 - miinus vähennyslasku 9-2 antaa arvon 7 * tulo kertolasku 3*4 antaa arvon 12 ** potenssi potenssiin korotus 2**3 antaa arvon 8 / jako jakolasku 4/3 antaa arvon 1.3333 % jakojäännös jakolasku, palauttaa jakojäännöksen 12%5 antaa arvon 2 Summa ja erotus ovat helppoja: Jos kaikki laskuoperaatiossa olevat muuttujat ovat kokonaislukuja, on tulos myös kokonaisluku. Jakolasku on ongelma: Jos jakolaskun jakaja tai jaettava (tai molemmat!) ovat liukulukuja, tulee tulokseksi myös liukuluku. Jakolaskun jakojäännös palautetaan jos käytetään %-operaattoria. Avainsanat, keywords Python 2:ssa on 31 avainsanaa. Niistä tulkki tunnistaa ohjelman rakenteen. Avainsanoja ei saa käyttää muuttujan nimenä. Python 3:ssa exec ei ole avainsana, mutta nonlocal on. and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try Tuo listan osaaminen on tärkeää ja sen opit pikkuhiljaa opintojen edetessä. 2
Tiedon lukeminen käyttäjältä Otetaan tämäkin mukaan tässä yhteydessä, koska sitä tarvitaan laiteläheisessä ohjelmoinnissa. Käyttäjältä pyydetään tietoja input-käskyllä. luku = input ('Anna luku: \n') print 'Annoit luvun', luku Vastaus palautetaan aina merkkijonona, vaikka käyttäjä antaisikin luvun. Siksi, ennen kuin käyttäjältä saatuja tietoja voi käyttää laskutoimituksissa, tulee tehdä tyyppi-muunnos merkkijonosta luvuksi. Selviää harjoituksessa. Erikoismerkki keno-än, \n, input-käskyn lopussa tarkoittaa rivinvaihtoa. Näin kysymys ja vastaus menevät eri riveille. Kirjoita koodi ja talleta nimellä muuttuja.py Muuttujat määritellään Laskutoimitukset Tulostus Aja ohjelma klikkaamalla Geanyn suorita-nappia. 3
Raspin LXTerminal Tulostamista varten käynnistyy LXTerminal-ohjelma ja sen käyttöliitäntä tulee esiin Linux Mintkoneen ruudulla. Kun muuttujaan asetetaan arvo, se päättelee oman tyyppinsä asetetun arvon perusteella. Muuttujan tyyppi Python-kielessä ei ole pysyvä. Kun tyyppi on asetettu, voidaan sitä muuttaa asettamalla sen arvo uudestaan. Esimerkiksi tekstimuuttuja voi muuttua kokonaislukumuuttujaksi. Muuttujan nimessä ei saa olla tiettyjä erikoismerkkejä, kuten huutomerkkejä (!). Ääkköset eivät ole sallittuja. Välilyönti ei ole sallittu, sillä se erottaa komentojen osat toisistaan. Välilyönti kannattaa korvata alaviivalla _. Huom! Muuttujien nimien ensimmäinen kirjain kirjoitetaan aina pienellä! Numeroita voidaan käyttää muuttujan nimessä, kunhan nimi ei ala numerolla. Nimi ei myöskään voi koostua pelkistä numeroista. Merkkijono on jono peräkkäisiä merkkejä. Merkkijono on vakio, sen arvoa ei voi jälkeenpäin muuttaa. Niitä on kolmenlaisia, mutta meille riittää tässä vaiheessa kaksi: 1. 'Raspi-tietokone' - merkkijono sitaattien välissä. 2. RaspberyPi - merkkijono lainausmerkkien välissä. Tehtävä Googlaa ASCII, suomenkielisiltä sivuilta. Selvitä mitä ovat aakkoset, isot ja pienet, ASCII-koodilla esitettynä. 4
RAM-muistisolu ja muuttuja SRAM-muistisolu on rakennettu transistoreista (kiikku, flip-flop) ja kukin solu voi säilöä yhden bitin, ykkösen tai nollan. Muistisääntö: kiikun lähtötila on kiikun tai kaakun, 1 tai 0. Muistisolun kiikku/flip-flop asettuu satunnaisesti joko 1- tai 0-tilaan kun käyttösähköt kytketään. Eli muistipaikalla /muuttujalla on jokin arvo ennen sen käyttöä, ellei sitä nollata tai aseteta siihen jotain arvoa. Kun sähköt katkeavat, bitit siirtyvät bittien taivaaseen. Osoite tulee CPU:lta Muuttuja - muistipaikka Käyttöjärjestelmä antaa sille nimen Osoite hexa-lukuna 0011 0100 hexalukuna 34 ASCII-arvona numero 4 Data tulee joko CPU:lta tai ulkoisilta laitteilta, netistä... piirros J.Mansikkaviita SRAM-muistin rakenne-idea. Muistia käsitellään 8-bitin palikkoina. Kuvan mukaan kuhunkin kahdeksan bitin säilöön päästään käsiksi osoiteväylän kautta. Osoiteväylä on 16/32/64-rinnakkaista johdinta, joissa voi olla joko ykkönen tai nolla, +5V (+3,3 V) jännite tai 0V. Bittikuvion perusteella muistin sisällä oleva osoitekooderi pääsee kiinni jokaiseen muistiriviin (tässä 8-bitin pakettiin). Jos osoiteväylä on 16-johdinta, muistipaikkoja voidaan osoittaa 2 potenssiin 16 eli 65536 jos osoiteväylä on 32-johdinta, niin muistipaikkoja on yli 4 miljoonaa. Mikroprosessori, CPU, Central Processing Unit, määrää millainen bittikuvio pannaan väylälle, se ohjaa WR-kirjoitus- ja RD-lukulinjoja joilla määrätään datan kulkusuunta, luetaanko (kopioidaan) muistipaikan sisältö vai kirjoitetaanko se uusiksi. Muistipaikalle annetaan nimi, jolloin sitä on helpompi käyttää. Python (yhdessä käyttöjärjestelmän kanssa) tietää nimen perusteella mikä bittikuvio pitää osoiteväylälle CPU:n toimesta asettaa jotta ko. muistipaikka=muuttuja löytyy. 5