Toisto – helpot tehtävät
Tehtävä 1. Selitä seuraavan koodin toiminta.

Koodi:
ehto = 0
while ehto < 10:
ehto += 1
print(ehto)
Ensin alustetaan ehto-muuttuja, jolle asetetaan arvoksi 0.
Sitten suoritetaan while-silmukan koodilohkoa niin kauan kuin ehto on alle 10.
Lisätään muuttujaan 1 ja tulostetaan sen arvo joka suorituksella.
Tehtävä 2. Kirjoita ohjelma, joka tulostaa luvut väliltä 2-15.

Tulosteena luvut 2-15 allekkain
Koodi:
for i in range(2, 16):
print(i)
Tehtävä 3. Kirjoita ohjelma, joka tulostaa parilliset luvut väliltä 2-20.

Tulosteena luvut 2, 4, 6, 8, 10, 12, 14, 16, 18 ja 20 allekkain
Koodi:
for i in range(2, 21):
if i % 2 == 0:
print(i)
Tehtävä 4. Kirjoita ohjelma, joka tulostaa kolmella jaolliset luvut väliltä 4-25.

Tulosteena luvut 6, 9, 12, 15, 18, 21 ja 24 allekkain
Koodi:
for i in range(4, 26):
if i % 3 == 0:
print(i)
Tehtävä 5. Ota syötteenä luku. Tarkista annetusta listasta, kuinka monesti siinä esiintyy syötteenä annettu luku. Tulosta määrä. Jos ei löytynyt, tulosta ”Ei löytynyt.”
Lista: [0,1,2,3,4,5,6,7,8,9,1,3,2,6,2,4,7,2,3,4,5,7,9,5,4,2]

Tulostaa luvun määrän listassa tai ”Ei löytynyt.”
Koodi:
lista = [0,1,2,3,4,5,6,7,8,9,1,3,2,6,2,4,7,2,3,4,5,7,9,5,4,2]
arvo = int(input("Syötä etsittävä arvo: "))
laskuri = 0
for alkio in lista:
if alkio == arvo:
laskuri += 1
if arvo not in lista:
print("Ei löytynyt.")
else:
print(laskuri)
Tehtävä 6. Ota syötteenä merkkijono ja tarkista, löytyykö siitä kirjain ’a’. Jos löytyy, tulosta ”Löytyi.”, jos ei, tulosta ”Ei löytynyt.”

Tulosteena ”Löytyi.”, jos syötteessä on kirjain a ja ”Ei löytynyt.”, jos ei ole.
Koodi:
syöte = input("Syötä merkkijono: ")
for kirjain in syöte:
if kirjain == "a":
print("Löytyi.")
break
else:
print("Ei löytynyt.")
Tehtävä 7. Ohjelmissa ei esiinny loputtomia silmukoita kuin vahingossa, sillä ne pysäyttävät ohjelman toiminnan.
Korjaa oheinen koodi siten, että silmukan suoritus lopetetaan joskus.
i = 0
while True:
i += 1
print(i)
print("Valmis")
Lisää esim. arvon 67 kohdalle break

Tulostaa luvut 1-67 ja sen jälkeen ”Valmis”.
Koodi:
i = 0
while True:
i += 1
print(i)
if i == 67:
break
print("Valmis")
Tehtävä 8.
a) Kirjoita ohjelma, joka tulostaa luvut 1-10.

Tulostaa luvut 1-10 allekkain
Koodi:
for i in range(1,11):
print(i)
b) Kirjoita ohjelma, joka tulostaa annetun viestin 10 kertaa.

Tulostaa muuttujan viesti arvon kymmenen kertaa allekkain.
Koodi:
viesti = input("Syötä viesti: ")
for i in range(0,10):
print(viesti)
c) Kirjoita ohjelma, joka lisää lukuun 1 10 kertaa ja tulostaa pelkästään lopputuloksen.

Tulosteena lukujen summa.
Koodi:
luku = 10
for i in range(0,10):
luku += 1
print(luku)
d) Ota syötteenä jokin sana ja lisää se viestiin 10 kertaa. Tulosta lopuksi viesti.

Tuloste:
Tämä on esimerkki. Sanoja: sanasanasanasanasanasanasanasanasanasana
Koodi:
lisäys = input("Syötä lisättävä sana: ")
viesti = "Tämä on esimerkki. Sanoja: "
for i in range(0,10):
viesti += lisäys
print(viesti)
e) Tulosta luku ja sana 10 kertaa.

Tulostaa ’8 sana’ kymmenen kertaa allekkain.
Koodi:
sana = "sana"
luku = 8
for i in range(0, 10):
print(luku, sana)
f) Tulosta luku ja sana siten, että luku kasvaa ja että luvun 1 kohdalla on sanan yksikkö ja seuraavien kohdalla monikko.

Tuloste:
1 Jotain
2 Joitain
3 Joitain
4 Joitain
5 Joitain
Koodi:
sana = "Jotain"
monikko = "Joitain"
for i in range(1,6):
if i == 1:
print(i, sana)
else:
print(i, monikko)
Tehtävä 9.
a) Tulosta luvut 10-1.

Tulostaa allekkain luvut 10-1.
Koodi:
for i in range(10,0,-1):
print(i)
b) Tulosta luvut 10-1 ja niiden perään 1-10. mitä eroja huomataan tulostamisessa?

Tulostaa luvut 10-1 ja 1-10 allekkain.
Huomataan, että kun mennään lukuja positiiviseen suuntaan, ei tarvitse erikseen määritellä askelta, sillä se on oletuksena yksi (positiiviseen suuntaan), kun taas mennessä negatiiviseen suuntaan askel tulee määrittää erikseen.
Koodi:
for i in range(10,0,-1):
print(i)
for i in range(1,11):
print(i)
c) Tulosta luvut 1-10 ja 10-1 vuorotellen samaan tulostukseen.

Tuloste:
1
10
2
9
3
8
4
7
5
6
6
5
7
4
8
3
9
2
10
1
Eli tulostaa vuorotellen lukuja yhdestä kymmeneen ja kymmenestä yhteen allekkain. 1, 10, 2, 9, jne.
Koodi:
for i in range(1,11):
print(i)
print(11-i)
d) Tulosta luvuista 1-10 vain joka toinen.
Voit käyttää apuna askelta, eli for-silmukan viimeistä parametria.

Tulosteena 1, 3, 5, 7 ja 9 allekkain.
Koodi:
for i in range(1,11,2):
print(i)
e) Tulosta joka toinen luku luvuista 1-10 ja 10-1 vuorotellen samaan tulostukseen.

Tuloste:
1 10 3 8 5 6 7 4 9 2
Koodi:
for i in range(1,11,2):
print(i)
print(11-i)
Tehtävä 3. SISÄKKÄISET FOR-SILMUKAT? hiukan ehkä edistynyttä – Vaikea
a) Tulosta suorakulmio
b) Tulosta paranneltu suorakulmio
c) Tulosta samainen suorakulmio eri suunnassa
d) Tulosta kuvio sekä oikein että väärinpäin, mutta silleen, että keskellä ne yhdistyy, eli keskimmäinen (eli eka tai vika) rivi jää pois toisesta tulostuksesta tai sit vaa häkkää ton vanhan for-silmukan.
e) mites sitten siitä oikealle symmetrinen
Tehtävä 10.
a) Tulosta luvut annetulta väliltä.

Tulostaa luvut annetulta väliltä sisältäen lukuvälin ensimmäisen ja viimeisen luvun.
Koodi:
alku = int(input("Anna lukuvälin ensimmäinen luku: "))
loppu = int(input("Anna lukuvälin viimeinen luku: "))
for luku in range(alku, loppu+1):
print(luku)
b) Tulosta parilliset luvut annetulta väliltä

Tulostaa parilliset luvut annetulta lukuväliltä.
Koodi:
alku = int(input("Anna lukuvälin ensimmäinen luku: "))
loppu = int(input("Anna lukuvälin viimeinen luku: "))
for luku in range(alku, loppu+1):
if luku % 2 == 0:
print(luku)
c) Tulosta vain ne parilliset luvut, jotka ovat jaollisia myös kolmella.

Tulostaa ne lukuvälin parilliset luvut, jotka ovat jaollisia myös kolmella, eli lukuvälin kuudella jaolliset luvut.
Koodi:
alku = int(input("Anna lukuvälin ensimmäinen luku: "))
loppu = int(input("Anna lukuvälin viimeinen luku: "))
for luku in range(alku, loppu+1):
if luku % 2 == 0 and luku % 3 == 0:
print(luku)
d) Tulosta näiden lukujen summa ja tulo.

Tulostaa vastaavasti kuin edellinen kohta, minkä jälkeen tulostaa vielä lukujen summan arvon sekä tulon arvon.
Koodi:
alku = int(input("Anna lukuvälin ensimmäinen luku: "))
loppu = int(input("Anna lukuvälin viimeinen luku: "))
summa = 0
tulo = 1
for luku in range(alku, loppu+1):
if luku % 2 == 0 and luku % 3 == 0:
summa += luku
tulo *= luku
print(luku)
print(summa)
print(tulo)
e) Lisää tulosteeseen merkinnät, mitä kukin niistä tarkottaa.

Tulostaa vastaavasti kuin edellinen kohta, mutta ennen summan arvoa tulostetaan ”Summa:” ja ennen tulon arvoa ”Tulo:”.
Koodi:
alku = int(input("Anna lukuvälin ensimmäinen luku: "))
loppu = int(input("Anna lukuvälin viimeinen luku: "))
summa = 0
tulo = 1
for luku in range(alku, loppu+1):
if luku % 2 == 0 and luku % 3 == 0:
summa += luku
tulo *= luku
print("Luku:", luku)
print("Summa:", summa)
print("Tulo:", tulo)
f) Lisää luvun eteen ”Luku 1”, ”Luku 2”, ”Luku n” sen mukaisesti, kuinka mones tulostettu luku on. Tulosta summa ja tulo edellisen kohdan mukaisesti.

Tulostus arvoilla 1 ja 20:
Luku 1: 6 Luku 2: 12 Luku 3: 18 Summa: 36 Tulo: 1296
Koodi:
alku = int(input("Anna lukuvälin ensimmäinen luku: "))
loppu = int(input("Anna lukuvälin viimeinen luku: "))
summa = 0
tulo = 1
indeksi = 1
for luku in range(alku, loppu+1):
if luku % 2 == 0 and luku % 3 == 0:
summa += luku
tulo *= luku
print(f"Luku {indeksi}:", luku)
indeksi+=1
print("Summa:", summa)
print("Tulo:", tulo)
Tehtävä 11. Palataan valintarakenteissa esiteltyyn kirjautumismekanismiin. Kirjoita ohjelma, joka kysyy käyttäjältä käyttäjätunnusta ja salasanaa niin kauan, kunnes ne vastaavat ennalta määriteltyjä. Lisää tulosteita, jotta käyttäjä ymmärtää, mitä hänen tulisi tehdä.

Tulosteet:
Tervetuloa kirjautumiseen.
Jos tunnukset väärin:
Yritä uudelleen.
Jos oikein:
Kirjautuminen onnistui!
Tervetuloa järjestelmään!
Koodi:
print("Tervetuloa kirjautumiseen.")
while True:
käyttäjä = input("Syötä käyttäjätunnus: ")
salasana = input("Syötä salasana: ")
if käyttäjä == "Käyttäjä" and salasana == "salasana":
break
print("Yritä uudelleen.")
print("Kirjautuminen onnistui!")
print("Tervetuloa järjestelmään!")
b) pyydetään siihen saakka, kunnes salasana on tarpeeks pitkä (keski)
c) Salasanassa tulee nyt olla yksi numero (0-9) (vaikea)
Tehtävä 12.
a) Käy läpi seuraava lista [”laiva”, ”auto”, ”nosturi”, ”nalle”, ”omena”] ja tulosta alkion merkkien määrä jokaista alkiota kohden. Esim.
autossa on 4 kirjainta.

Tulostus:
laivassa on 5 kirjainta.
autossa on 4 kirjainta.
nosturissa on 7 kirjainta.
nallessa on 5 kirjainta.
omenassa on 5 kirjainta.
Koodi:
lista = ["laiva", "auto", "nosturi", "nalle", "omena"]
for alkio in lista:
print(alkio+"ssa on", len(alkio), "kirjainta.")
b) Tulosta lisäksi keskiarvo listan alkioiden merkkien määristä.

Tulostus:
laivassa on 5 kirjainta. autossa on 4 kirjainta. nosturissa on 7 kirjainta. nallessa on 5 kirjainta. omenassa on 5 kirjainta. Listan keskiarvo on: 5.2
tai
Listan keskiarvo on: 5.2.
Koodi:
lista = ["laiva", "auto", "nosturi", "nalle", "omena"]
lista2 = []
for alkio in lista:
print(alkio+"ssa on", len(alkio), "kirjainta.")
lista2.append(len(alkio))
print("Listan keskiarvo on:", sum(lista2)/len(lista2))
# Vaihtoehtoinen tapa tulostaa keskiarvo
print(f"Listan keskiarvo on: {sum(lista2)/len(lista2)}.")
c) Entäpä mediaani? Vinkki: voit järjestää listan lista.sort() avulla suuruusjärjestykseen! (keski)
Tehtävä 7.
Luo Eratostheneen seula. Ota kokonaislukusyöte n.
Käytetään tätä ja tulostetaan välin 0…n alkuluvut, niiden määrä, summa ja alkulukuparit (Keski)
Tehtävä 8.
Käännä merkkijono peilikuvakseen. (Keski)
Vinkki: silmukoilla voi mennä myös taaksepäin.
Vinkki 2: Viimeisen indeksin saat luvun len(merkkijono)-1 avulla.
Tehtävä 13. Tässä tehtävässä otetaan syötteenä merkkijono ja käydään sitä läpi ja napataan siinä esiintyvien tietyntyyppisten merkkien määriä.
a) Laske merkkijonossa esiintyvät vokaalit ja tulosta niiden määrä esimerkin mukaisesti:
Tässä on 6 vokaalia.

Esimerkkitulosteena:
Tässä on 8 vokaalia.
Koodi:
vokaalit = 0
syöte = input("Syötä merkkijono: ")
for kirjain in syöte:
if kirjain in "aeiouyåäöAEIOUYÅÄÖ":
vokaalit += 1
print("Tässä on", vokaalit, "vokaalia.")
b) Laske vokaalien lisäksi nyt konsonantit ja tulosta myös niiden määrä samalla tavalla.

Esimerkkitulosteena:
Tässä on 8 vokaalia.
Tässä on 13 konsonanttia.
Koodi:
vokaalit = 0
konsonantit = 0
syöte = input("Syötä merkkijono: ")
for kirjain in syöte:
if kirjain in "aeiouyåäöAEIOUYÅÄÖ":
vokaalit += 1
elif kirjain in "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ":
konsonantit += 1
print("Tässä on", vokaalit, "vokaalia.")
print("Tässä on", konsonantit, "konsonanttia.")
c) Laske näiden lisäksi vielä numeroiden määrä ja tulosta se samalla tavalla.

Esimerkkitulosteena:
Tässä on 8 vokaalia.
Tässä on 13 konsonanttia.
Tässä on 3 lukua.
Koodi:
vokaalit = 0
konsonantit = 0
luvut = 0
syöte = input("Syötä merkkijono: ")
for kirjain in syöte:
if kirjain in "aeiouyåäöAEIOUYÅÄÖ":
vokaalit += 1
elif kirjain in "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ":
konsonantit += 1
elif kirjain in "0123456789":
luvut += 1
print("Tässä on", vokaalit, "vokaalia.")
print("Tässä on", konsonantit, "konsonanttia.")
print("Tässä on", luvut, "lukua.")
d) Laske vielä kirjainten ja numeroiden lisäksi välimerkit ja tulosta niiden määrä (voit valita yleisimmin käytetyt välimerkit, kaikkia ei vaadita).

Esimerkkitulosteena:
Tässä on 8 vokaalia.
Tässä on 13 konsonanttia.
Tässä on 3 lukua.
Tässä on 6 välimerkkiä.
Tässä on 0 muita merkkejä.
Koodi:
vokaalit = 0
konsonantit = 0
luvut = 0
välimerkit = 0
muut = 0
syöte = input("Syötä merkkijono: ")
for kirjain in syöte:
if kirjain in "aeiouyåäöAEIOUYÅÄÖ":
vokaalit += 1
elif kirjain in "bcdfghjklmnpqrstvwxzBCDFGHJKLMNPQRSTVWXZ":
konsonantit += 1
elif kirjain in "0123456789":
luvut += 1
elif kirjain in '".:,;-_!"/()[]+*=><#':
välimerkit += 1
else:
muut += 1
print("Tässä on", vokaalit, "vokaalia.")
print("Tässä on", konsonantit, "konsonanttia.")
print("Tässä on", luvut, "lukua.")
print("Tässä on", välimerkit, "välimerkkiä.")
print("Tässä on", muut, "muita merkkejä.")
Tehtävä 10.
Kirjoita ohjelma, jolla voi laskea sanat jossain lauseessa. (hankalaa)
Tehtävä 11.
Näytä n ensimmäistä Fibonaccin lukujonon jäsentä. (keski vinkeillä)
Tehtävä 14.
a) Laske seuraavan geometrisen sarjan 20 ensimmäisen jäsenen summa
ja tulosta se niin tarkkana kuin Python antaa sen.

Tulostus:
Geometrisen sarjan jäsenet seuraavasti:
0.5
0.75
0.875
0.9375
0.96875
0.984375
0.9921875
0.99609375
0.998046875
0.9990234375
0.99951171875
0.999755859375
0.9998779296875
0.99993896484375
0.999969482421875
0.9999847412109375
0.9999923706054688
0.9999961853027344
0.9999980926513672
0.9999990463256836
Koodi:
summa = 0
for i in range(1, 21):
summa += 1/2**i
print(summa)
b) Laske saman sarjan 60 ensimmäisen jäsenen summa. Mitä huomaat?

Tulostus:
60 ensimmäistä jäsentä seuraavasti:
0.5
0.75
0.875
0.9375
0.96875
0.984375
0.9921875
0.99609375
0.998046875
0.9990234375
0.99951171875
0.999755859375
0.9998779296875
0.99993896484375
0.999969482421875
0.9999847412109375
0.9999923706054688
0.9999961853027344
0.9999980926513672
0.9999990463256836
0.9999995231628418
0.9999997615814209
0.9999998807907104
0.9999999403953552
0.9999999701976776
0.9999999850988388
0.9999999925494194
0.9999999962747097
0.9999999981373549
0.9999999990686774
0.9999999995343387
0.9999999997671694
0.9999999998835847
0.9999999999417923
0.9999999999708962
0.9999999999854481
0.999999999992724
0.999999999996362
0.999999999998181
0.9999999999990905
0.9999999999995453
0.9999999999997726
0.9999999999998863
0.9999999999999432
0.9999999999999716
0.9999999999999858
0.9999999999999929
0.9999999999999964
0.9999999999999982
0.9999999999999991
0.9999999999999996
0.9999999999999998
0.9999999999999999
1.0
1.0
1.0
1.0
1.0
1.0
1.0
Koodi:
summa = 0
for i in range(1, 61):
summa += 1/2**i
print(summa)
Huomataan, että Pythonin tarkkuus loppuu kesken ja viimeiset jäsenet ”pyöristetään” 1.0:an.
Tämä johtuu siitä, että jos lukua ei voida esittää rajallisella bittimäärällä tarkasti, tietokone tallentaa siitä vain likiarvon.
Useimmissa nykytietokoneissa liukuluvut esitetään likiarvoina binäärimurtolukuina. Sama käytäntö on Pythonissa.
Tämä tarkoittaa sitä, että osoittaja muodostetaan ensimmäisistä 53 bitistä (alkaen merkittävimmästä bitistä) ja nimittäjä on kahden potenssi.
Huomaamme tulosteesta, että kun i:n arvo kasvoi yli 53:n, likiarvoja ei voida enää näyttää.
