Ohjelmoinnin peruskurssi Y1 CS-A1111 14.9.2016 CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 1 / 19
Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja, suorittaa niille laskutoimituksia ja kertoo niiden tuloksen käyttäjälle tiedät, minkä tyyppisiä arvoja Python-ohjelmissa voi käsitellä ja tunnet monia niille mahdollisia operaatioita tiedät, mitä tarkoitetaan pääohjelmalla CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 2 / 19
Kertausta: muuttujat Muuttujia käytetään ohjelman käsittelemien arvojen tallentamiseen ja käsittelyyn. Muuttujalle voi antaa arvon sijoituskäskyllä, jota merkitään =:lla. nimi = "Matti" print("hei,", nimi) print("tervetuloa Python-kurssille!") Esimerkkiajo Hei, Matti Tervetuloa Python-kurssille! CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 3 / 19
Kertausta: arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea input-käskyllä. Käskyn sulkujen sisään kirjoitetaan käyttäjälle annettava kehote. Luetun arvon voi antaa arvoksi muuttujalle sijoituskäskyllä. nimi = input("kerro nimesi: ") print("hei,", nimi) print("tervetuloa Python-kurssille!") Ajoesimerkki Kerro nimesi: Minna Hei, Minna Tervetuloa Python-kurssille! CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 4 / 19
Kertausta: lukuarvon lukeminen käyttäjältä Käsky input välittää aina luetun arvon tekstinä, merkkijonona. Jotta luettua arvoa voitaisiin käsitellä lukuna, se pitää ensin muuttaa kokonais- tai desimaaliluvuksi. Jos luettu merkkijono on muuttujan rivi arvona, saadaan sitä vastaava kokonaisluku muuttujan luku1 kokonaislukutyyppiseksi arvoksi seuraavasti: luku1 = int(rivi) Jos luettu merkkijono on muuttujan rivi arvona, saadaan sitä vastaava desimaaliluku muuttujan luku2 float-tyyppiseksi arvoksi seuraavasti: luku2 = float(rivi) CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 5 / 19
Esimerkki: eurolaskuri print("muutan markat euroiksi.") rivi = input("anna rahasumma markkoina: ") markat = float(rivi) eurot = markat / 5.94573 print("se on", eurot, "euroa.") Esimerkkiajo Muutan markat euroiksi. Anna rahasumma markkoina: 543.50 Se on 91.4101380318 euroa. CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 6 / 19
Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen käyttöä. Muuttujan määrittelyn yhteydessä kerrotaan, minkä tyyppisiä arvoja muuttujalle voi antaa. Python-ohjelmissa muuttujia ei määritellä, mutta arvolla on kuitenkin aina tyyppi. Tyyppi vaikuttaa esim. siihen, millaisia operaatoita arvolle voi tehdä ja miten nämä operaatiot toimivat. Kokonaisluvuille käytetään yleensä tyyppiä int. Desimaalilukujen esittämiseen käytetään float-tyyppiä. Suuria tai hyvin pieniä desimaalilukuja voi esittää eksponenttimerkinnän avulla, esim. 2.22E12 tai 1.57E-31 float-tyyppiset arvot eivät ole reaalilukuja matemaattisessa mielessä. CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 7 / 19
Tyypeistä jatkoa Merkkijonojen tyyppi on str. Merkkijonot voidaan kirjoittaa yksintai kaksinkertaisten lainausmerkkien sisään, esim. "Matti Virtanen", Maija Makinen Lisäksi on tyyppi bool totuusarvojen esittämiseen. Mahdollisia arvoja on True ja False. CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 8 / 19
Sijoituskäsky Muuttujalle voi antaa arvon sijoituskäskyllä. Sijoitettava arvo voi olla myös laskutoimituksen tulos: leveys = 5 korkeus = 6 pinta_ala = leveys * korkeus Muuttujan vanhaa arvoa voi käyttää hyväksi uutta arvoa laskettaessa: luku = 5 luku = luku + 2 korkeus = 7.0 korkeus = korkeus / 2 CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 9 / 19
Sijoituskäsky jatkoa Muuttujan vanhan arvon käyttäminen hyväksi sijoituskäskyssä on niin yleistä, että sille on lyhennysmerkintä: muuttuja = muuttuja + jotain voidaan kirjoittaa muuttuja += jotain Esimerkiksi: luku = 5 luku += 1 Vastaavasti toimivat -=, *= ja /=. CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 10 / 19
Välitehtävä 1 Mitä seuraava ohjelma tulostaa? brutto = 5000 verot = 2000 netto = brutto - verot verot = 1000 print(netto) CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 11 / 19
Aritmeettisia laskutoimituksia Yleisimmin käytetyt aritmeettiset operaattorit kokonais- ja desimaaliluvuille ovat +, -, *, /, //, % ja ** Jakolasku / toimii perinteisen jakolaskun tapaan. Operaattori // katkaisee kahden positiivisen kokonaisluvun jakolaskun tuloksen kokonaisluvuksi. Mitään pyöristyksiä ei suoriteta. Operaattori % tarkoittaa jakojäännöstä ja ** potenssiin korotusta. CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 12 / 19
Funktiot ja pääohjelma Tyypillisesti ohjelman rakennetta selkiytetään jakamalla ohjelma funktioihin. Funktio on ohjelman osa, jolle on annettu oma nimi. Jos ohjelmassa kutsutaan funktiota, siirrytään ohjelmakoodissa sille riville, josta funktion määrittely alkaa. Kun funktio on suoritettu loppuun, palataan takaisin siihen kohtaan, josta funktiota kutsuttiin. Samaa funktiota voidaan kutsua monta kertaa ohjelman suorituksen aikana. Funktioiden määrittelyyn ja käyttöön tutustutaan tarkemmin myöhemmin, mutta tässä vaiheessa opetellaan määrittelemään yksi erityinen funktio, main eli pääohjelma. CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 13 / 19
Pääohjelman määrittely Pääohjelman määrittely aloitetaan kirjoittamalla def main(): Tämän jälkeen kirjoitetaan pääohjelmaan kuuluvat käskyt sisennettynä, esimerkiksi def main(): print("muutan markat euroiksi.") rivi = input("anna rahasumma markkoina: ") markat = float(rivi) eurot = markat / 5.94573 print("summa on", eurot, "euroa.") Jotta ohjelma suorittaisi pääohjelman, sitä pitää kutsua. Tämä tehdään pääohjelman määrittelyn ulkopuolella: main() CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 14 / 19
Esimerkki: alennettu hinta Kun käyttäjältä luetaan useampi arvo, tallennetaan kukin omaan muuttujaansa. def main(): rivi = input("anna tuotteen normaalihinta (eur): ") hinta = float(rivi) rivi = input("anna alennus prosentteina: ") alennus = float(rivi) alennettu = (100.0 - alennus) / 100.0 * hinta print("alennettu hinta on", alennettu, "euroa.") main() CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 15 / 19
Rivinvaihto tulosteen perään Goblinin tarkastusten helpottamiseksi lisätään tällä kurssilla rivinvaihto käyttäjälle annettavan kehotteen perään. Tämä voidaan tehdä merkin \n avulla. Käsky print lisää rivinvaihdon automaattisesti. def main(): rivi = input("anna tuotteen normaalihinta (eur): \n") hinta = float(rivi) rivi = input("anna alennus prosentteina: \n") alennus = float(rivi) alennettu = (100.0 - alennus) / 100.0 * hinta print("alennettu hinta on", alennettu, "euroa.") main() CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 16 / 19
Välitehtävä 2 Kirjoita ohjelma, joka pyytää käyttäjältä hänen autonsa polttoaineen kulutuksen (l / 100 km) ja sen, kuinka pitkän matkan käyttäjä aikoo ajaa autolla. Ohjelma tulostaa käyttäjälle, kuinka paljon matka vie polttoainetta. CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 17 / 19
Kommentit Kommentit ovat ohjelmaa lukevalle ihmiselle tarkoitettua selitystekstiä. Python-tulkki ohittaa ne. Kommentti aloitetaan #-merkillä. Kaikki sen jälkeen rivillä tuleva teksti tulkitaan kommentiksi. # Ohjelma ilmoittaa sekunteina annetun ajan tunteina, # minuutteina ja sekunteina. def main(): rivi = input("anna aikajakson pituus sekunteina.\n") pituus_sekunteina = int(rivi) tunnit = pituus_sekunteina // 3600 jaannossekunnit = pituus_sekunteina % 3600 minuutit = jaannossekunnit // 60 sekunnit = jaannossekunnit % 60 print("aikajakson pituus on", tunnit, "h", minuutit, "min", sekunnit, "s.") CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 18 / 19
Toinen dokumentointimahdollisuus #-merkillä aloitettavien kommenttien lisäksi Pythonissa on myös toinen mahdollisuus kommentoida ohjelman kokonaisuuksia, dokumentointimerkkijono (documentation string, docstring). Se on lainausmerkkien sisään pantu kommentti, jota voidaan käyttää joko ohjelmatiedoston alussa tai heti funktion tai luokan otsikkoa seuraavalla rivillä. Python-tulkki pystyy käyttämään hyväksi dokumentointimerkkijonoja ja niiden avulla voidaan myös generoida automaattisesti ohjelman dokumentteja. Tällä kurssilla dokumentointimerkkijonoja ei käsitellä tämän enempää, mutta Pydev lisää oletuksena dokumentointimerkkijonon (kolmen lainausmerkin sisässä) uuden ohjelmatiedoston alkuun. Opiskelija saa valintansa mukaan joko jättää dokumentointimerkkijonon tiedoston alkuun tai poistaa dokumentointimerkkijonon ja korvata sen tavallisilla kommenteilla. CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 19 / 19