Ohjelmointi5
Luku- ja kuviojonot
Esimerkki 1
Tee ohjelma, joka tulostaa lukujonon 19, 17, 15, 13, 11, 9, 7, 5, 3, 1.
Ratkaisu
Lukujono muodostuu parittomista luvuista välillä 1–19 laskevassa järjestyksessä. Range()-komennossa alue määritetään ensimmäisestä luvusta eli luvusta 19 alkaen. Lukualue päättyy yhden luvun halutun päättymisluvun jälkeen. Koska viimeiseksi halutaan tulostaa luku 1, päättyy alue lukuun nolla. Parittomat luvut saadaan laskevassa järjestyksessä, kun määritetään askeleeksi –2. Laskuria kuvaamaan käytetään muuttujakirjainta n.
KOODI
print n
TULOSTE
19 17 15 13 11 9 7 5 3 1
|
Jos lukujono halutaan tulostaan yhdelle riville, tulostusrivi kirjoitetaan print n,. Numerot tulostuvat tällöin yhdelle riville välilyönnillä erotettuina.
Jos lukujono halutaan tulostaa yhdelle riville luvut pilkulla erotettuna, kirjoitetaan tulostusrivi print (str(n)+', '). Numerot tulostuvat yhdelle riville välilyönneillä erotettuna ja myös viimeisen luvun perän tulee pilkku.
Esimerkki 2
Tee ohjelma, joka tulostaa kuviojonon jäseniä käyttäjän haluaman määrän.
Ratkaisu
Kuviojono saadaan tulostettua leimaustoiminnon avulla.
Käyttäjän ilmoittamaa kuviojonon jäsenten määrää käytetään silmukkamuuttujan alueen päättymislukuun. Käyttäjältä pyydetty lukumäärä, muuttuja lkm, pitää muuttaa kokonaisluvuksi, jotta sitä voidaan käyttää range()-komennossa.
Ulommalla silmukkarakenteella määrätään kuvioiden määrä. Silmukkamuuttujan lopetusluvuksi käytetään käyttäjän ilmoittamaa määrää lisättynä yhdellä. Ulomman silmukan silmukkamuuttujaa merkitään muuttujakirjaimella n. Kuviojonon jäsenten välinen etäisyys määritetään ulommassa silmukassa.
Sisempi silmukkarakenne toteuttaa halutun kuviojonon muodostumisen. Käytetään kuviojonon tekemiseen leimaustoimintoa. Sisemmän silmukan silmukkamuuttujaa merkitään muuttujakirjaimella m.
from turtle import*
alue = Screen()
ukko = Turtle()
lkm = int(input(u'Kuinka monta jäsentä kuviojonoon tulostetaan? (maks. 6)'))
ukko.shape('circle')
ukko.penup()
ukko.goto(-300, 0)
for n in range (1, lkm + 1):
for m in range(n):
ukko.stamp()
ukko.forward(20)
ukko.forward(55)
Kun käyttäjä haluaa tulostaa neljä kuviojonon jäsentä, on tuloste seuraava:
Tehtävä 3 (Palautettavat tehtävät)
Tavoitteena on muodostaa lukujono. Tee ohjelma, joka tulostaa lukujonon väliltä 2–20. Lukujonon ensimmäinen jäsen on 2 ja seuraava jäsen on aina kolme edellistä suurempi.
Tehtävä 4 (Palautettava tehtävä)
Tavoitteena on muodostaa lukujono, jonka seuraava jäsen on aina edellistä pienempi.Tee ohjelma, joka tulostaa lähtölaskennan luvusta 10 lukuun 0. Seuraava jäsen on aina yhden edellistä pienempi.
Tehtävä 5
Tavoitteena harjoitella kuviojonon tulostamista leimaustoiminnolla. Tee ohjelma, joka tulostaa lukujonoa 1, 2, 3, 4, 5 vastaavan kuviojonon. Alla on mallikuva tällaista lukujonoa vastaavasta kuviojonosta. Käytä haluamaasi hahmoa kuviojonon muodostamiseen.
Tehtävä 6
Tavoitteena on tulostaa kuviojono piirtämällä.Tee ohjelma, joka tulostaa lukujonoa 2, 4, 6 vastaavan kuviojonon. Käytä kuviona piirrettyä ympyrää.
- Ympyrä saadaan piirrettyä circle-komennolla.
- Ympyrän säteeksi kannattaa valita 10 tai 20.
- Määritä kuvioiden välinen siirtymä sopivaksi.
- Määritä jäsenien välinen etäisyys.
- Muista nostaa ja laskea kynää tarvittaessa, muutoin siirtymiset piirtyvät viivana.
Ehtorakenne vaihtoehtoisille tapahtumille
Jos-ehtorakenteessa tapahtuma tapahtuu, jos annettu ehto täytyy. Usein tarkasteltavia ehtoja on useampia kuin yksi. Ohjelma käy läpi kaikki jos-lauseet riippumatta siitä, kohdataanko ehdon täyttävä tapahtuma jossain vaiheessa. Erillisiä jos-ehtolauseita voidaan korvata käyttämällä jos-muuten-rakennetta, jossa ohjelma suorittaa tietyn tapahtuman, kun vertailu on tosi ja toisen tapahtuman vertailun ollessa epätosi.
Ehtorakenne mahdollistaa sen, että eri valinnat tuottavat erilaisen lopputuloksen.
Ehtorakenne if–else if ehto tai vertailu: |
Esimerkki 3
Testissä on oikein-väärin-väittämiä. Tee ohjelma, jossa käyttäjältä kysytään seuraavasti:
”Oikein vai väärin: 3x + x = 4x. k vai e?”
Jos vastaus on oikein, ohjelma onnittelee oikeasta vastauksesta. Jos käyttäjän antama vastaus on väärin, ohjelma suosittelee käyttäjää kertaamaan asian uudelleen.
Ratkaisu
Vaihtoehtoisia tapahtumia on kaksi, joten ohjelma voidaan toteuttaa joko kahdella jos-lauseella tai käyttämällä jos-muuten-ehtorakennetta.
Tapa 1: Jos-ehtorakenteella toteutettuna
vastaus = input(u'Oikein vai väärin: 3x + x = 4x. k vai e?')
if vastaus == 'k':
print('Onneksi olkoon oikeasta vastauksesta!')
if vastaus == 'e':
print(u'Kertaa asia vielä uudelleen.')
Tapa 2: Jos-muuten-ehtorakenteella toteutettuna
vastaus = input(u'Oikein vai väärin: 3x + x = 4x. k vai e?')if vastaus == 'k':
print('Onneksi olkoon oikeasta vastauksesta!')
else:
print(u'Kertaa asia vielä uudelleen.')
Esimerkki 4
Tee ohjelma, joka piirtää kuviojonon käyttäjän haluamalla hahmolla. Käyttäjä voi valita hahmoksi joko ympyrän, neliön tai kolmion. Käyttäjältä myös kysytään, kuinka monta jäsentä kuviojonoon tulostetaan.
Ratkaisu
Valittavana on kolme eri vaihtoehtoa, joista jokainen tekee eri tapahtuman. Käytetään rakennetta if–elif–else.
Ehtorakenne if–else if ehto tai vertailu: else: |
Toistuvasti esiintyvä osa koodista kannattaa tehdä kerran. Testaamisen jälkeen koodia voi kopioida muihin kohtiin ja tehdä niihin kohtiin tarvittavat muutokset.
Tuloste, kun hahmoksi valitaan ympyrä ja kuviojonoon halutaan kolme jäsentä.
Tehtävä 7 (Palautettava tehtävä)
Tavoitteena on harjoitella if–else-rakenteen käyttämistä. Tee ohjelma, jossa käyttäjältä kysytään, onko hän kissa- vai koiraihminen. Kissaihmisille ohjelma tulostaa lauseen ”Kissoja onkin mukava silitellä ja kuunnella niiden kehräystä.”. Koiraihmisille ohjelma tulostaa ”Koirien kanssa onkin mukava ulkoilla ja harrastaa.” Käytä ohjelmassa if–else-rakennetta.
Tehtävä 8
Tavoitteena on harjoitella if–elif–else rakenteen käyttämistä. Tee ohjelma, joka toimii yksinkertaisena nelilaskimena. Käyttäjältä kysytään kaksi lukua ja minkä laskutoimituksen, yhteen-, vähennys-, kerto- vai jakolaskun, hän haluaa niillä tehdä.
- Määritä muuttujat ja niiden arvoksi käyttäjältä kysyttävät luvut. Vastaus on muutettava kokonaisluvuksi, jotta sitä voidaan käyttää myöhemmin laskutoimituksissa.
- Määritä muuttuja, jonka arvoksi tulee käyttäjän valitsema laskutoimitus. Mieti, miten haluat, että käyttäjä ilmaisee valitsemansa laskutoimituksen, jotta siitä voi tehdä ehtorakenteen.
- Ohjelma tulostaa valitun laskutoimituksen ja laskun vastauksen.
- Koska vaihtoehtoja on neljä, tarvittava ehtorakenne on if–elif–elif–else.
Tehtävä 9*
Tavoitteena on syventää jos-muuten-rakenteen käyttämistä. Tee ohjelma, jossa käyttäjälle esitetään kysymyksiä lausekkeen ja muuttujan arvosta ja hänen on valittava kahdesta vaihtoehdosta oikea.
Käyttäjälle esitettävät kysymykset ja vastausvaihtoehdot:
- Mikä on lausekkeen x + 1 arvo, kun x saa arvon 5? a) 5 b) 6
- Mikä on lausekkeen 2n + 1 arvo, kun n = 10? a) 21 b) 211
- Mikä on lausekkeen 3a arvo, kun a = –4? a) 12 b) –12
- Millä x:n arvolla x – 4 = 9? a) x = 5 b) x = 13
Käyttäjä valitsee joko a tai b. Oikeasta vastauksesta käyttäjä saa kannustuksena ”Hienosti tiedetty!”. Väärästä vastauksesta käyttäjä saa palautteena ”Kaipaat vielä hieman harjoitusta tämän tyyppisestä tehtävästä.”
Jokaiseen kysymykseen tulee tehdä erillinen jos-muuten-rakenne.
Tehtävä 10*
Tavoitteena on palauttaa mieleen merkkijonojen yhtenevyyden vertailu.Tee ohjelma, jossa käyttäjän pitää arvata jotain. Käyttäjä voi esimerkiksi
- arvata tunnussanan
- keksiä vastauksen arvoitukseen
- keksiä, mitä sanaa yritetään selittää
- keksiä, mitä vieraskieliset sanat tarkoittavat.
Päätä itse, mitä ohjelman antaa palautteena oikeasta ratkaisusta ja mitä väärästä. Pohdi, onko ratkaisun kirjoitusasulla väliä eli pitääkö isot kirjaimet olla isoja vai onko itse sana tärkein kirjoitusmuodosta huolimatta.