Tehtävänanto Ensimmäinen tehtävä on ohjelmoinnin opettelun perinteitä kunnioittaen Hello World!-esimerkki. Luvussa tulkin käyttöönoton yhteydessä teimme pienen ohjelman, joka tulosti tekstin "Tämä on Python-ohjelma, kirjoitettuna IDLE-editorilla.". Tälläkertaa tehtävänä onkin tutustua kurssin verkkotulkkiin, ja toteuttaa sillä samanlainen ohjelma. Tee siis ohjelma, joka tulostaa sanat Moi maailma! Tämä on Python-ohjelma. Voit katsoa tehtävään mallia 1. luvun lopussa olleista ohjeista. Muista lisäksi alkuun tuleva kommenttiohje # -*- coding: cp1252 -*- jolla tulkille kerrotaan että lauseessa on skandinaavisia kirjaimia. Ratkaisusi # -*- coding: utf-8 -*- print("Moi maailma!") print("Tämä on Python-ohjelma.") ------------------------------------------- Tehtävä 2.1 muuttujan tekeminen ja tulostaminen Tehtävästä saadut pisteet 1 Tehtävänanto Toisen luvun ensimmäinen tehtävä on yksinkertainen muuttujan luominen ja sisällön tulostaminen. Tehtävässä on tarkoitus luoda muuttuja, antaa sille arvoksi merkkijono "merkkijonosisältöä" ja sen jälkeen tulostaa Muuttujaan muuttuja on tallennettu merkkijonosisältöä Loppuun tulevan pisteen saat lisättyä lauseeseen joko muokkaamalla print-käskyn sep-parametriä tai muokkaamalla merkkijonoa. Lisäohjeita löydät luvun sisältä. Ratkaisusi # -*- coding: utf-8 -*- muuttuja = "merkkijonosisältöä" print("Muuttujaan muuttuja on tallennettu",muuttuja,".") Malliratkaisu: # -*- coding: cp1252 -*- #tehdään muuttujia muuttuja = "merkkijonosisältöä" print("Muuttujaan muuttuja on tallennettu ",muuttuja,".",sep = "") ------------------------------------------- Tehtävänanto Toinen tehtävä liittyy samalla tapaa muuttujien käyttämiseen. Tällä kertaa muuttujille annetaan lukuarvot 1000 ja 24. Tämän jälkeen suorita muuttujilla laskutoimitus (muuttuja_1+muuttuja2+15) potenssiin 2. Parametrit laskutehtävän toteuttamiseen löydät esimerkiksi luvusta 3, joskin potenssilasku voidaan toteuttaa myös käskyllä **, eli vaikkapa 10 ** 2 antaisi tuloksen 100. Lopuksi ohjelma tulostaa vastauksen muodossa Laskutoimituksen tulos on: 1079521 Ratkaisusi # -*- coding: utf-8 -*- muuttuja_1 = 1000 muuttuja_2 = 24 tulos = (muuttuja_1+muuttuja_2+15)**2 print("Laskutoimituksen tulos on:",tulos) Malliratkaisu # -*- coding: cp1252 -*- #Lasketaan muuttujilla muuttuja_1 = 1000 muuttuja_2 = 24 tulos = (muuttuja_1 + muuttuja_2 + 15) ** 2 print("Laskutoimituksen tulos on:", tulos) ------------------------------------------- Tehtävänanto Kolmas tehtävä käsittelee tyyppimuunnoksia. Luodaan kaksi muuttujaa, joille annetaan arvoiksi 10.6411 ja "Merkijono". Tee numeroarvon sisältävälle muuttujalle int()-tyyppimuunnos, ja kerro merkkijono kahdella. Tämän jälkeen laita ohjelmasi tulostamaan saamasi vastaukset muodossa Kokonaislukumuunnos ei osaa pyöristää: 10 Merkkijonon kertominen tuottaa toistoa: MerkkijonoMerkkijono Ratkaisusi # -*- coding: utf-8 -*- muuttuja_1 = 10.6411 muuttuja_2 = "Merkkijono" muuttuja_1 = int(muuttuja_1) print("Kokonaislukumuunnos ei osaa pyöristää:", muuttuja_1) print("Merkkijonon kertominen tuottaa toistoa: ",muuttuja_2*2) Malliratkaisu # -*- coding: cp1252 -*- #Tyyppimuunnokset muuttuja_1 = 10.6411 muuttuja_2 = "Merkkijono" muuttuja_1 = int(muuttuja_1) muuttuja_2 = muuttuja_2 * 2 print("Kokonaislukumuunnos ei osaa pyöristää:", muuttuja_1) print("Merkkijonon kertominen tuottaa toistoa:", muuttuja_2) ------------------------------------------- Tehtävänanto Tässä tehtävässä harjoitellaan esimuotoillun merkkijonon (kolmen sitaatin merkkijonon) käyttämistä sekä tulosteen muotoilumerkkejä \n ja \t. Tee ohjelma, joka tulostaa seuraavan lauseen: Tämä on usean rivin tulostus: Teksti on jaettu usealle riville. Nimi: Petteri Ammatti: Kartturi Ensimmäiset kaksi riviä voit muodostaa esimuotoiltua merkkijonoa käyttäen. Alempaa tulostetta varten joudut työskentelemään muotoilumerkkien kanssa. Ratkaisusi # -*- coding: utf-8 -*- print("Tämä on usean rivin tulostus:" ) print("Teksti on jaettu usealle riville.") print("Nimi:\tPetteri") print("Ammatti:\tKartturi") Malliratkaisu # -*- coding: cp1252 -*- #Muotoilut merkkijono = """Tämä on usean rivin tulostus: Teksti on jaettu usealle riville.""" print(merkkijono) print("Nimi:\tPetteri\nAmmatti:\tKartturi") ------------------------------------------- Tehtävänanto Tässä tehtävässä otetaan ensikertaa käyttäjältä vastaan syöte, ja toteutamme yksinkertaisen ohjelman, joka suorittaa yhteenlaskuoperaation. Tee ohjelma, joka pyytää käyttäjältä kaksi lukua ja tallentaa ne kahteen eri muuttujaan. Tämän jälkeen laske luvut yhteen, ja tulosta vastaus. Ohjelman pitäisi toimiessaan antaa seuraanvanlainen tuloste: Laskin Anna ensimmäinen luku: 100 Anna toinen luku: 25 Tulos on: 125 Tälläerää virheellisistä syötteistä, kuten merkkijonoista tai vastaavasta ei tarvitse välittää. Tämä on samalla ensimmäinen kahdesta "jatkuvasta tehtävästä", ja jatkammekin ohjelman laajentamista seuraavassa luvussa. Tämän vuoksi on myös suositeltavaa, että alat jatkossa kommentoimaan koodeja, koska myöhemmin palaamme aiemmin tehtyyn koodiin. Ratkaisusi # -*- coding: utf-8 -*- print("Laskin") eka = input("Anna ensimmäinen luku:") #oletuksena tulee string toka = input("Anna toinen luku:") #oletuksena tulee string eka = int(eka) # muutetaan arvot integeriksi tai yhteenlasku epäonnistuu toka = int(toka) # muutetaan arvot integeriksi tai yhteenlasku epäonnistuu print("Tulos on: ", eka+toka) Malliratkaisu # -*- coding: cp1252 -*- #Nelilaskin: merkkijonon ottaminen print("Laskin") luku1 = int(input("Anna ensimmäinen luku: ")) luku2 = int(input("Anna toinen luku: ")) vastaus = luku1 + luku2 print("Tulos on:", vastaus) ------------------------------------------ Tehtävänanto Luvun viimeisessä tehtävässä kokeillaan merkkijonon leikkaamista. Määrittele muuttuja, joka sisältää merkkijonon "Hattukauppias". Tämän jälkeen ota siitä leikkaukset, joissa on A)neljä ensimmäistä kirjainta B) neljä viimeistä kirjainta ja C) merkkijono väärinpäin. Tulosta vastaus muodossa Muuttujan 4 ensimmäistä kirjainta ovat Hatt Muuttujan 4 viimeistä kirjainta ovat pias Muuttujan teksti on väärinpäin saippuakuttaH Ratkaisusi # -*- coding: utf-8 -*- muuttuja = "Hattukauppias" print("Muuttujan 4 ensimmäistä kirjainta ovat", muuttuja[:4]) print("Muuttujan 4 viimeistä kirjainta ovat", muuttuja[-4:]) print("Muuttujan teksti on väärinpäin", muuttuja[::-1]) Malliratkaisu # -*- coding: cp1252 -*- #Käytetään leikkauksia muuttuja = "Hattukauppias" print("Muuttujan 4 ensimmäistä kirjainta ovat", muuttuja[:4]) print("Muuttujan 4 viimeistä kirjainta ovat", muuttuja[-4:]) print("Muuttujan teksti on väärinpäin", muuttuja[::-1]) ------------------------------------------ Tehtävänanto Kolmannen luvun tehtävät aloitetaan yksinkertaisen if-rakenteen luomisella. Ohjelma pyytää käyttäjältä luvun ja tallentaa sen muuttujaan. Mikäli luku on parillinen, ohjelma tulostaa vastauksen "Antamasi luku oli parillinen". If-rakenteen ehtolauseeseen tarvittavat parametrit löydät luvun taulukosta, ja helpoin tapa toteuttaa ohjelma onkin käyttää jakojäännös-operaattoria, testaten onko jakojäännös 0. Ohjelman ei tarvitse myöskään reagoida virheellisiin syötteisiin eikä desimaalilukuihin. Ohjelma tulostaa seuraavan vastauksen: Anna luku: 24 Antamasi luku oli parillinen. tai vaihtoehtoisesti Anna luku: 11 Eli ei mitään, mikäli luku ei ole parillinen. Ratkaisusi # -*- coding: utf-8 -*- luku = input("Anna luku:") luku = int(luku) if luku%2==0: print("Antamasi luku oli parillinen.") Malliratkaisu # -*- coding: cp1252 -*- #if-rakenteen käyttäminen syote = int(input("Anna luku: ")) if syote % 2 == 0: print("Antamasi luku oli parillinen.") ------------------------------------------ Tehtävänanto Toinen harjoitustehtävä on jo hieman lähempänä varsinaista ohjelmointia, ja samalla hieman monimutkaisempi. Tehtävässä luodaan kaksi if-else-rakennetta, joista toinen sijoitetaan ensimmäisen sisään tyyliin: if [valinta]: [koodia] if [Valinta]: [koodia] else: [koodia} else: [koodia] Ohjelmassa käyttäjältä pyydetään nimi ja salasana. Jos nimi on väärin, tulostaa ohjelma "Nimi oli väärin.". Jos nimi on oikein, pyydetään salasanaa. Jos salasana on oikein, tulostetaan "Salasana ja nimi oli oikein!", muussa tapauksessa "Salasana oli väärin.". Toteuta oikeaksi nimi-salasana-pariksi Erkki ja Esimerkki. Ohjelma tulostaa toimiessaan seuraavanlaisia vastauksia: Anna nimi: Petteri Nimi oli väärin. tai vaihtoehtoisesti Anna nimi: Erkki Anna salasana: Kanada Salasana oli väärin. tai vaihtoehtoisesti Anna nimi: Erkki Anna salasana: Esimerkki Salasana ja nimi oli oikein! Ratkaisusi # -*- coding: utf-8 -*- nimi = input("Anna nimi:") if nimi == "Erkki": salasana = input("Anna salasana:") if salasana == "Esimerkki": print("Salasana ja nimi oli oikein!") else: print("Salasana oli väärin.") else: print("Nimi oli väärin.") Malliratkaisu # -*- coding: cp1252 -*- #if-else-rakenteen käyttäminen nimi = input("Anna nimi: ") if nimi == "Erkki": salasana = input("Anna salasana: ") if salasana == "Esimerkki": print("Salasana ja nimi oli oikein!") else: print("Salasana oli väärin.") else: print("Nimi oli väärin.") ------------------------------------------ Tehtävänanto Kolmas esimerkki on ensimmäinen tehtävä, jossa luodaan käyttäjälle valikko. Käyttäjältä pyydetään luku väliltä 1-3, ja sen mukaan, mitä käyttäjä valitsee tulostetaan joko "Haukion kala Oy" valinnalla 1, "Metallipaja VasaraAika" valinnalla 2 tai "Balin palapelitehdas" valinnalla 3. Toimiessaan ohjelma tulostaa esimerkiksi seuraavaa: Valitse kohde (1-3): 1 Haukion kala Oy Ratkaisusi # -*- coding: utf-8 -*- kohde = input("Valitse kohde (1-3):") kohde = int(kohde) if kohde == 1: print("Haukion kala Oy") if kohde == 2: print("Metallipaja VasaraAika") if kohde == 3: print("Balin palapelitehdas") Malliratkaisu # -*- coding: cp1252 -*- #if-else-rakenteen käyttäminen nimi = int(input("Valitse kohde (1-3): ")) if nimi == 1: print("Haukion kala Oy") elif nimi == 2: print("Metallipaja VasaraAika") elif nimi == 3: print("Balin palapelitehdas") ------------------------------------------ Tehtävänanto Neljännessä tehtävässä harjoitellaan usean parametrin käyttämistä valintalauseessa. Tässä tehtävässä laajennetaan ensimmäistä tehtävää, ja otetaan mukaan toinen luku. Jos yksi käyttäjän syöttämistä luvuista on parillinen, tulostetaan "Toinen luku on parillinen", jos molemmat niin "Molemmat luvut on parillisia." Mikäli kumpikaan käyttäjän antama luku ei ole parillinen, tulostetaan "Molemmat luvut ovat parittomia." Ohjelma tulostaa toimiessaan seuraavanlaisia vastauksia: Anna luku: 10 Anna toinen luku: 11 Toinen luku on parillinen. tai vaihtoehtoisesti Anna luku: 12 Anna toinen luku: 20 Molemmat luvut ovat parillisia. tai vaihtoehtoisesti Anna luku: 13 Anna toinen luku: 15 Molemmat luvut ovat parittomia. Ratkaisusi # -*- coding: utf-8 -*- luku_1 = input("Anna luku:") luku_2 = input("Anna toinen luku:") luku_1 = int(luku_1) luku_2 = int(luku_2) if luku_1%2==0 and not luku_2%2==0: print("Toinen luku on parillinen.") if luku_2%2==0 and not luku_1%2==0: print("Toinen luku on parillinen.") if luku_1%2==0 and luku_2%2==0: print("Molemmat luvut ovat parillisia.") if luku_1%2==1 and luku_2%2==1: print("Molemmat luvut ovat parittomia.") Malliratkaisu # -*- coding: cp1252 -*- #usean parametrin käyttäminen luku1 = int(input("Anna luku: ")) luku2 = int(input("Anna toinen luku: ")) if (luku1 %2 == 0) and (luku2 % 2 == 0): print("Molemmat luvut ovat parillisia.") elif (luku1 %2 == 0) or (luku2 % 2 == 0): print("Toinen luku on parillinen.") else: print("Molemmat luvut ovat parittomia.") ------------------------------------------ Tehtävänanto Viimeinen tehtävä on jatkoa edellisen luvun 5. tehtävälle. Laajenna aiemmin aloittamaasi laskinta siten, että if-valintarakenteen avulla on mahdollista valita tehdäänkö luvuille yhteen- (valinta 1), vähennys- (valinta 2), kerto- (valinta 3) vai jakolasku (valinta 4). Lisäksi lisää ohjelman alkuun käyttäjälle ohje siitä, mitä eri valinnat tekevät, sekä ohjelmaan toiminto, millä ohjelma tulostaa "Valintaa ei tunnistettu", mikäli käyttäjä valitsee jotain muuta kuin valinnan väliltä 1-4. Tämä on helpointa toteuttaa else-osion avulla. Toimiessaan ohjelma toimii esimerkiksi seuraavalla tavalla: Anna ensimmäinen luku: 10 Anna toinen luku: 40 (1) + (2) - (3) * (4) / Tee valinta (1-4): 3 Tulos on: 400 Eli suorittaa halutun laskutoimituksen ja tulostaa vastauksen, tai mikäli valinta on virheellinen niin Anna ensimmäinen luku: 101 Anna toinen luku: 11 (1) + (2) - (3) * (4) / Tee valinta (1-4): 100 Valintaa ei tunnistettu. Ratkaisusi # -*- coding: utf-8 -*- # print("Laskin") eka = input("Anna ensimmäinen luku:") #oletuksena tulee string toka = input("Anna toinen luku:") #oletuksena tulee string eka = int(eka) # muutetaan arvot integeriksi tai yhteenlasku epäonnistuu toka = int(toka) # muutetaan arvot integeriksi tai yhteenlasku epäonnistuu print("(1) +"); print("(2) -"); print("(3) *"); print("(4) /"); valinta = input("Tee valinta (1-4):") valinta = int(valinta) if valinta==1: print("Tulos on: ", eka+toka) elif valinta==2: print("Tulos on: ", eka-toka) elif valinta==3: print("Tulos on: ", eka*toka) elif valinta==4: print("Tulos on: ", eka/toka) else: print("Valintaa ei tunnistettu.") Malliratkaisu # -*- coding: cp1252 -*- #if-elif-else-rakenteen käyttäminen luku1 = int(input("Anna ensimmäinen luku: ")) luku2 = int(input("Anna toinen luku: ")) print("(1) +\n(2) -\n(3) *\n(4) /") valinta = int(input("Tee valinta (1-4): ")) if valinta == 1: print("Tulos on:", luku1+luku2) elif valinta == 2: print("Tulos on:", luku1-luku2) elif valinta == 3: print("Tulos on:", luku1*luku2) elif valinta == 4: print("Tulos on:", luku1/luku2) else: print("Valintaa ei tunnistettu.") ------------------------------------------ Tehtävänanto Neljännen luvun ensimmäinen tehtävä on yksinkertaisen while-rakenteen toteuttaminen. Tehtävänä onkin luoda ohjelma, joka tulostaa joka kierroksella kierrosluvun, millä tällä hetkellä ollan. Ohjelma aloittaa kierroksesta 0, ja jatkaa tästä eteenpäin 4 kierrosta. Toimiessaan ohjelma tulostaa seuraavan tekstin: Olemme kierroksella 0 Olemme kierroksella 1 Olemme kierroksella 2 Olemme kierroksella 3 Olemme kierroksella 4 Toistorakenteen ehto kannattaa suunnitella kahta muuttujaa käyttäen, joista toinen määrää ylärajan ja toiseen lasketaan aina käynnissä oleva kierros. Ratkaisusi # -*- coding: utf-8 -*- raja = int(5) kierros = int(0) while kierros < raja: print("Olemme kierroksella",kierros) kierros+=1 Malliratkaisu # -*- coding: cp1252 -*- #while-rakenne kierroksia = 5 kierros = 0 while kierros < kierroksia: print("Olemme kierroksella",kierros) kierros = kierros + 1 ------------------------------------------ Tehtävänanto Toinen 4. luvun ohjelmointitehtävä liittyy avoimeen toistoon, jossa toistorakenne toteutetaan siten, että käyttäjän syötteet ratkaisevat sen milloin ohjelma lopetetaan. Toteuta ohjelma, joka joka kierroksen alussa pyytää käyttäjältä merkkijonon ja tulostaa sen ruudulle. Ainoan poikkeuksen tähän tekee tilanne, jossa käyttäjä kirjoittaa tekstin "lopeta", jolloin ohjelma tulostaa tekstin "Lopetit ohjelman" ja sammuu. Toimiessaan oikein ohjelma tulostaa seuraavaa: Kirjoita jotain: testi testi Kirjoita jotain: Urjala Urjala Kirjoita jotain: lopeta Lopetit ohjelman. Ohjelma kannattaa sijoittaa yhden "while True:"-rakenteen sisään, ja katkaisuehto sitoa if-valintarakenteeseen ja break-käskyyn. Ratkaisusi # -*- coding: utf-8 -*- jatkuu = True while jatkuu: joku = input("Kirjoita jotain: ") if joku == "lopeta": jatkuu = False break else: print(joku) print("Lopetit ohjelman.") Malliratkaisu # -*- coding: cp1252 -*- #while-rakenne while True: teksti = input("Kirjoita jotain: ") if teksti == "lopeta": print("Lopetit ohjelman.") break print(teksti) ------------------------------------------ Tehtävänanto Kolmas tehtävä käyttää for-toistorakennetta ja se on hieman aiempia monimutkaisempi. Tee ohjelma, joka pyytää käyttäjältä kierrosmäärän. Tämän jälkeen tee ohjelma, joka laskee kierroslukujen kertymän. Eli jos käyttäjä antaa syötteen 3, laskee ohjelma 0+1+2, jos 5 niin 0+1+2+3+4. Lopuksi ohjelma tulostaa käyttäjälle lopputuloksen muodossa "Kertymäksi saatiin:" ja vastaus. Toimiessaan oikein ohjelma tulostaa seuraavaa: Kuinka monta kierrosta?: 3 Kertymäksi saatiin: 3 Tehtävässä kannattaa kokeilla kuinka kierrosluvun lisääminen muuttujaan toimii, eli vaikkapa tulos = tulos + kierrosluku. Ratkaisusi # -*- coding: utf-8 -*- kierros = int(input("Kuinka monta kierrosta?:")) tulos = int(0) kierrosluku = int(0) for kierrosluku in range(kierros): tulos = tulos + kierrosluku kierrosluku = kierrosluku + 1 print("Kertymäksi saatiin:",tulos) Malliratkaisu # -*- coding: cp1252 -*- kierroksia = int(input("Kuinka monta kierrosta?: ")) summa = 0 for i in range(1,kierroksia): summa = summa + i print("Kertymäksi saatiin:",summa) ------------------------------------------ Tehtävänanto Luvun viimeisessä tehtävässä jatkamme eteenpäin aiemmin tekemäämme laskinta. Tällä kertaa ohjelmaan tehdään seuraavat lisätoiminnot: (A) laskin ei sammu heti laskutoimituksen jälkeen, vaan käyttäjä voi valita useamman laskutehtävän ja ohjelma sammuu vasta kun käyttäjä valitsee 6, sekä (B) Käyttäjä voi valinnalla 5 vaihtaa käyttämänsä luvut. Toimiessaan ohjlma toimii esimerkiksi seuraavalla tavalla: Anna ensimmäinen luku: 10 Anna toinen luku: 15 (1) + (2) - (3) * (4) / (5)Vaihda luvut (6)Lopeta Valitut luvut: 10 15 Tee valinta (1-6): 2 Tulos on: -5 (1) + (2) - (3) * (4) / (5)Vaihda luvut (6)Lopeta Valitut luvut: 10 15 Tee valinta (1-6): 5 Anna uusi ensimmäinen luku: 20 Anna uusi toinen luku: 10 (1) + (2) - (3) * (4) / (5)Vaihda luvut (6)Lopeta Valitut luvut: 20 10 Tee valinta (1-6): 6 Jälleen kerran koko varsinainen ohjelma kannattaa sijoittaa toistorakenteen sisään, jolloin katkaisu on helppo toteuttaa break-käskyllä. Ratkaisusi # -*- coding: utf-8 -*- valinta = int(0) eka = int(input("Anna ensimmäinen luku:")) toka = int(input("Anna toinen luku:")) while valinta != 6: print("(1) +"); print("(2) -"); print("(3) *"); print("(4) /"); print("(5)Vaihda luvut"); print("(6)Lopeta"); print("Valitut luvut:",eka,toka); valinta = int(input("Tee valinta (1-6):")) if valinta == 1: print("Tulos on: ", eka+toka) elif valinta==2: print("Tulos on: ", eka-toka) elif valinta==3: print("Tulos on: ", eka*toka) elif valinta==4: print("Tulos on: ", eka/toka) elif valinta==5: eka = int(input("Anna uusi ensimmäinen luku:")) toka = int(input("Anna uusi toinen luku:")) elif valinta==6: break else: continue Malliratkaisu # -*- coding: cp1252 -*- #if-elif-else-rakenteen käyttäminen luku1 = int(input("Anna ensimmäinen luku: ")) luku2 = int(input("Anna toinen luku: ")) while True: print("(1) +\n(2) -\n(3) *\n(4) /\n(5)Vaihda luvut\n(6)Lopeta") print("Valitut luvut:",luku1,luku2) valinta = int(input("Tee valinta (1-6): ")) if valinta == 1: print("Tulos on:", luku1+luku2) elif valinta == 2: print("Tulos on:", luku1-luku2) elif valinta == 3: print("Tulos on:", luku1*luku2) elif valinta == 4: print("Tulos on:", luku1/luku2) elif valinta == 5: luku1 = int(input("Anna uusi ensimmäinen luku: ")) luku2 = int(input("Anna uusi toinen luku: ")) elif valinta == 6: break else: print("Valintaa ei tunnistettu.") ------------------------------------------ Tehtävänanto Huomaa, että kaikissa tehtävissä voit olettaa, tehtävänannossa mainitut tiedostot ovat olemassa ja levylle on kirjoitusoikein. Ohjelman ei siis tässä vaiheessa tarvitse välittää siitä, onko tiedostoa olemassa tai voiko sen avata jne., vaikka ohjeissa mainitaankin että kyseiset toiminnot tulisi sulkea poikkeuksenkäsittelijöiden sisään. Viidennen luvun ensimmäinen tehtävä on suoraviivainen tiedostonlukutehtävä. Palvelimelle on luotu tiedosto "faktat.txt", joka on tallennettu samaan hakemistoon lähdekoodisi kanssa ja johon on tallennettu tekstiä. Tehtävänäsi on luoda ohjelma, joka avaa tiedoston lukutilaan, lukee tekstin kokonaisuudessaan ja tulostaa vastauksen lisäten alkuun huomion "Tiedostosta luettiin teksti:". Toimiessaan oikein ohjelma tulostaa vaikkapa seuraavan tekstin: Tiedostosta luettiin teksti: Aenean convallis erat. Aliquam iaculis mauris sed sem. In pede sapien, molestie vel, aliquet sit amet, malesuada a, magna. Ratkaisusi # -*- coding: utf-8 -*- tiedosto = open("faktat.txt","r") sisalto = tiedosto.read() print("Tiedostosta luettiin teksti:",sisalto) Malliratkaisu # -*- coding: cp1252 -*- #Tiedostonlukija kahva = open("faktat.txt","r") teksti = kahva.read() kahva.close() print("Tiedostosta luettiin teksti:",teksti) ------------------------------------------ Tehtävänanto Toisessa tehtävässä kirjoitetaan tiedostoon. Tee ohjelma, joka ensin pyytää käyttäjältä tiedoston nimen, ja tämän jälkeen tekstin, jonka käyttäjä haluaa tiedostoon kirjoitettavan. Tämän jälkeen ohjelma tekee tiedoston, kirjoittaa tuloksen ja antaa ilmoituksen "Luotiin tiedosto [tiedostonnimi] ja siihen tallennettiin teksti: [sisältö]." Toimiessaan oikein ohjelma tulostaa vaikkapa seuraavan tekstin: Minkäniminen tiedosto luodaan?: loki.txt Mitä kirjoitetaan tiedostoon?: Attencion, attencion. 10, 10, 22, 33, Adios. Luotiin tiedosto loki.txt ja siihen tallennettiin teksti: Attencion, attencion. 10, 10, 22, 33, Adios. Ratkaisusi # -*- coding: utf-8 -*- nimi = input("Minkäniminen tiedosto luodaan?:") tiedosto = open(nimi,"w") sisalto = input("Mitä kirjoitetaan tiedostoon?:") tiedosto.write(sisalto) tiedosto.close() print("Luotiin tiedosto", nimi ,"ja siihen tallennettiin teksti:",sisalto) Malliratkaisu # -*- coding: cp1252 -*- #Tiedostoon kirjoittaja nimi = input("Minkäniminen tiedosto luodaan?: ") teksti = input("Mitä kirjoitetaan tiedostoon?: ") kahva = open(nimi,"w") kahva.write(teksti) kahva.close() print("Luotiin tiedosto",nimi,"ja siihen tallennettiin teksti:",teksti) ------------------------------------------ Tehtävänanto Tästä luvusta eteenpäin ohjelmissa, joissa on erillisiä alifunktioita, tulisi olla myös erillinen pääfunktio. Ensimmäinen tehtävä on yksinkertaisen funktiorakenteen toteuttaminen. Tee ohjelma, jossa on pääfunktio main ja yksi alifunktio nimeltään tulostaja. Kutsuttaessa alifunktio ei vastaanota parametreja eikä palauta mitään, mutta tulostaa tekstin "Tulostusfunktio!". Pääohjelman ainoa toiminto on kutsua alifunktiota. Ohjelma tulostaa siis tekstin Tulostusfunktio! Muista myös laittaa ohjelmaan pääfunktiokutsu if __name__ == "__main__": main() Ratkaisusi # -*- coding: utf-8 -*- #kirjoitetaan ohjelmaan alifunkio def tulostaja(): print("Tulostusfunktio!") def main(): tulostaja() #Kutsutaan pääfunktiota if __name__ == "__main__": main() Malliratkaisu # -*- coding: cp1252 -*- def tulostaja(): print("Tulostusfunktio!") def main(): tulostaja() if __name__ == "__main__": main() ------------------------------------------ Tehtävänanto Toinen tehtävä liittyy alifunktion parametrien välitykseen. Tee tehtävä, jossa on pääfunktio main ja alifunktio "toinenpotenssi". Alifunktio ottaa vastaan yhden parametrin, laskee sille toisen potenssin ja tulostaa vastauksen muodossa "Toinen potenssi on [vastaus]". Pääohjelma vastaavasti pyytää käyttäjältä lukua "Anna lukuarvo: " ja lähettää sen eteenpäin alifunktiolle. Toimiessaan oikein ohjelma toimii seuraavalla tavalla: Anna lukuarvo: 10 Toinen potenssi on 100 Tai vaikkapa Anna lukuarvo: 123123 Toinen potenssi on 15159273129 Muista myös laittaa ohjelmaan pääfunktiokutsu if __name__ == "__main__": main() Ratkaisusi # -*- coding: utf-8 -*- #kirjoitetaan ohjelmaan alifunkio def toinenpotenssi(luku): potenssi = luku * luku print("Toinen potenssi on ", potenssi) def main(): luku = int(input("Anna lukuarvo: ")) toinenpotenssi(luku) #Kutsutaan pääfunktiota if __name__ == "__main__": main() Malliratkaisu # -*- coding: cp1252 -*- def toinenpotenssi(luku): print("Toinen potenssi on",luku**2) def main(): syote = int(input("Anna lukuarvo: ")) toinenpotenssi(syote) if __name__ == "__main__": main() ------------------------------------------