Valinta – vaikeat tehtävät
Tehtävä 1.
a) Eräs koe arvioidaan arvosanoilla A, B, C, D, E ja F, jossa F on hylätty. (Kyseessä lienee kaiketi ulkomaalainen koe.) Arvosanat annetaan lineaarisesti pisteiden mukaan. Jos oppilas saa 90–100 pistettä, hänelle annetaan arvosanaksi A. Jos 80–89, B. Jos 70–79, C. Jos 60–69, D. Jos 50–59, E. Jos alle 50, F ja koe hylätään. Kirjoita ohjelma, joka tulostaa oikean arvosanan pisteiden mukaan.

Tulosteet:
A
B
C
D
E
F
Koodi:
pisteet = 100
if pisteet >= 90:
print("A")
elif pisteet >= 80:
print("B")
elif pisteet >= 70:
print("C")
elif pisteet >= 60:
print("D")
elif pisteet >= 50:
print("E")
else:
print("F")
b) Ohjelma vaatii nyt syötteenä oppilaan nimen ja kokeesta saadun pistemäärän. Lisää ohjelmaan päivitys, jotta tuloste vastaa seuraavaa esimerkkitulostetta:
Pekka sai kokeesta 78 pistettä, joten arvosanaksi tuli C.

Esimerkkituloste:



Koodi:
nimi = input("Syötä oppilaan nimi: ")
pisteet = int(input("Syötä oppilaan pisteet: "))
if pisteet >= 90:
print(nimi, "sai kokeesta", pisteet, "pistettä, joten arvosanaksi tuli A")
elif pisteet >= 80:
print(nimi, "sai kokeesta", pisteet, "pistettä, joten arvosanaksi tuli B")
elif pisteet >= 70:
print(nimi, "sai kokeesta", pisteet, "pistettä, joten arvosanaksi tuli C")
elif pisteet >= 60:
print(nimi, "sai kokeesta", pisteet, "pistettä, joten arvosanaksi tuli D")
elif pisteet >= 50:
print(nimi, "sai kokeesta", pisteet, "pistettä, joten arvosanaksi tuli E")
else:
print(nimi, "sai kokeesta", pisteet, "pistettä, joten arvosanaksi tuli F")
Esimerkkituloste:
Henkka sai kokeesta 65 pistettä, joten arvosanaksi tuli D
Tehtävä 2. E-kohta saattaa olla hankala, sillä se menee hieman taas ohi kurssin aiheen (merkkijonon manipulointi), mutta pitäisi olla tehtävissä kuitenkin kyvykkäälle oppilaalle (tietoakin pitää osata etsiä.)
a) Kehonrakentajat rakastavat proteiinia. Se kuitenkin maksaa suhteellisen paljon. Tee ohjelma, joka kysyy syötteenä tuotteen hinnan ja proteiinin määrän grammoina. Jos hinta on kolme (3.0) tai vähemmän senttiä grammalta, voidaan todeta proteiinin hinnan olevan siedettävällä tasolla ja tulostaa ”Hyvän hintaista.” Muutoin tulostetaan ”Pakko maksaa.”





Koodi:
hinta = float(input("Syötä tuotteen hinta sentteinä: "))
proteiini = float(input("Syötä proteiinin määrä grammoina: "))
if hinta/proteiini <= 3.0:
print("Hyvän hintaista.")
else:
print("Pakko maksaa.")
Tulosteet:
Hyvän hintaista.
Pakko maksaa.
b) Aina ei päästä noinkaan alhaisiin lukemiin. Lisätään siis ehtoja hinnan tarkasteluun. Jos proteiinin hinnaksi saadaan alle neljä (4.0) senttiä grammaa kohden, voidaan tulostaa ”Vieläkin siedettävää.” Jos alle viisi (5.0) snt/g, tulostetaan ”Raha riittää vielä.” Jos alle kuusi (6.0) snt/g, tulostetaan ”Alkaa olla kallista.” Jos yli kuusi (6.0) snt/g, tulostetaan ”Tässähän köyhtyy.”








Koodi:
hinta = float(input("Syötä tuotteen hinta sentteinä: "))
proteiini = float(input("Syötä proteiinin määrä grammoina: "))
if hinta/proteiini <= 3.0:
print("Hyvän hintaista.")
elif hinta/proteiini < 4.0:
print("Vieläkin siedettävää.")
elif hinta/proteiini < 5.0:
print("Raha riittää vielä.")
elif hinta/proteiini < 6.0:
print("Alkaa olla kallista.")
else:
print("Tässähän köyhtyy.")
Tulosteet:
Hyvän hintaista.
Vieläkin siedettävää.
Raha riittää vielä.
Alkaa olla kallista.
Tässähän köyhtyy.
c) Inflaatio alkaa vaikuttaa myös proteiinin hintaan. Taloustieteilijät ovat todenneet, että alle viisi senttiä grammaa kohden on hyvä hinta proteiinille (mutta mitäpä he aiheesta tietäisivät…) Muuta ohjelmaa siten, että kaikkiin ”hintaluokkiin” lisätään 2 senttiä grammaa kohden. Lisää lisäksi tuloste ”Uskomaton diili!”, jos hinta jossain tuotteessa on alle neljä (4.0) snt/g.







Koodi:
hinta = float(input("Syötä tuotteen hinta sentteinä: "))
proteiini = float(input("Syötä proteiinin määrä grammoina: "))
if hinta/proteiini < 4.0:
print("Uskomaton diili!")
elif hinta/proteiini < 5.0:
print("Hyvän hintaista.")
elif hinta/proteiini < 6.0:
print("Vieläkin siedettävää.")
elif hinta/proteiini < 7.0:
print("Raha riittää vielä.")
elif hinta/proteiini < 8.0:
print("Alkaa olla kallista.")
else:
print("Tässähän köyhtyy.")
Tulosteet:
Uskomaton diili!
Hyvän hintaista.
Vieläkin siedettävää.
Raha riittää vielä.
Alkaa olla kallista.
Tässähän köyhtyy.
d) Proteiinin päivittäinen saanti mitataan usein grammoina painokiloa kohden. Lisää ohjelmaan toiminnallisuus, jonka avulla voidaan laskea, paljonko Arnold Schwarzeneggerin päivittäin tarvitsema proteiini vähintään maksoi, kun hän huippukunnossa pysyäkseen tarvitsi n. 2 grammaa painokiloa kohden. Arska painoi kisatessaan n. 107 kiloa. Proteiini maksoi silloin halvimmillaan n. 2,5 senttiä grammalta (tämä tieto ei ole tarkistettu). Ohjelman tulee ottaa syötteenä henkilön nimi ja paino ja tulostaa liukuluku yksiköineen seuraavan esimerkkitulosteen mukaisesti:
Arskan proteiini maksoi 605.5 senttiä päivässä!

Koodi:
hinta = float(input("Syötä tuotteen hinta sentteinä: "))
proteiini = float(input("Syötä proteiinin määrä grammoina: "))
if hinta/proteiini < 4.0:
print("Uskomaton diili!")
elif hinta/proteiini < 5.0:
print("Hyvän hintaista.")
elif hinta/proteiini < 6.0:
print("Vieläkin siedettävää.")
elif hinta/proteiini < 7.0:
print("Raha riittää vielä.")
elif hinta/proteiini < 8.0:
print("Alkaa olla kallista.")
else:
print("Tässähän köyhtyy.")
nimi = input("Syötä henkilön nimi: ")
paino = float(input("Syötä henkilön paino: "))
print(nimi+"n proteiini maksoi", paino*2*(hinta/proteiini), "senttiä päivässä!")





Tulosteet:
Kaikki edellisen kohdan tulosteet ja lisäksi eri riville seuraavan esimerkin mukainen tulostus:
Arskan proteiini maksoi 605.5 senttiä päivässä!
e) Ihmiset eivät hintoja laskiessaan useinkaan käytä senttien murto-osia, eivätkä ilmoita pelkkiä senttejä käyttäen yli euron hintaisia ostoksia. Formatoi ohjelman tulostetta seuraavan esimerkin mukaiseksi:
Arskan proteiini maksoi 6 euroa ja 6 senttiä päivässä!

Koodi:
hinta = float(input("Syötä tuotteen hinta sentteinä: "))
proteiini = float(input("Syötä proteiinin määrä grammoina: "))
if hinta/proteiini < 4.0:
print("Uskomaton diili!")
elif hinta/proteiini < 5.0:
print("Hyvän hintaista.")
elif hinta/proteiini < 6.0:
print("Vieläkin siedettävää.")
elif hinta/proteiini < 7.0:
print("Raha riittää vielä.")
elif hinta/proteiini < 8.0:
print("Alkaa olla kallista.")
else:
print("Tässähän köyhtyy.")
nimi = input("Syötä henkilön nimi: ")
paino = float(input("Syötä henkilön paino: "))
teksti = str(int(paino*2*(hinta/proteiini)))
eurot = teksti[:-2]
sentit = teksti[-2:]
print(nimi+"n proteiini maksoi", eurot, "euroa", sentit, "senttiä päivässä!")





Tulosteet:
Kaikki C-kohdan tulosteet ja lisäksi eri riville seuraavan esimerkin mukainen tulostus:
Arskan proteiini maksoi 6 euroa 6 senttiä päivässä
Tehtävä 3.
a) Keittokirjassa on ohje, johon tarvitaan yksi unssi (n. 28,3 g) kaakaojauhetta. Kirjoita ohjelma, joka ottaa syötteenä määrän teelusikallisia (n. 5 g) ja tulostaa ”Liian vähän.”, jos niiden yhteenlaskettu määrä ei ylitä yhtä unssia. Muussa tapauksessa tulostetaan ”Riittää jo!”




Koodi:
lusikat = int(input("Syötä teelusikallisten määrä: "))
if lusikat*5 < 28.3:
print("Liian vähän.")
else:
print("Riittää jo!")
Tulosteet:
Liian vähän.
Riittää jo!
b) Liikaa kaakaojauhetta ei toki ole koskaan hyvä. Jos lisätyn kaakaojauheen määrä ylittää yhden unssin enemmällä kuin 50 %:lla, lisää ohjelmaan tulosteena suhde, jolla muita aineksia pitäisi lisätä, jotta reseptiä ei muokata liikaa seuraavan esimerkkitulosteen mukaisesti:
Muita aineksia tulisi lisätä ainakin 59,0106007067 %.





Koodi:
lusikat = int(input("Syötä teelusikallisten määrä: "))
if lusikat*5 < 28.3:
print("Liian vähän.")
elif lusikat*5 > 28.3*1.5:
print("Muita aineksia tulisi lisätä ainakin", (lusikat*5/28.3)*100 - 100, "%")
else:
print("Riittää jo!")
Tulosteet:
Liian vähän.
Muita aineksia tulisi lisätä ainakin 59.010600706713774 %
Riittää jo!
c) b-kohdassa saatu arvo on turhan tarkka meidän tarkoituksiamme varten. Pienempikin tarkkuus riittäisi. Pythonissa on oma pyöristysfunktio, round(luku, tarkkuus), joka vaatii parametrikseen (luku) pyöristettävän luvun sekä valinnaisesti pyöristystarkkuuden (tarkkuus), joka on oletuksena nolla. Esimerkkinä pyöristetään tuo b-kohdan esimerkkitulosteen arvo kahden desimaalin tarkkuudelle:
round(59,0106007067, 2), josta tuloksena saadaan 59,01
Pyöristä suhde, jolla muita aineksia lisätään, kahden desimaalin tarkkuudelle ja tulosta se sitten b-kohdan mukaisesti.

Koodi:
lusikat = int(input("Syötä teelusikallisten määrä: "))
if lusikat*5 < 28.3:
print("Liian vähän.")
elif lusikat*5 > 28.3*1.5:
arvo = round((lusikat*5/28.3)*100 - 100, 2)
print("Muita aineksia tulisi lisätä ainakin", arvo, "%")
else:
print("Riittää jo!")



Tulosteet:
Liian vähän.
Muita aineksia tulisi lisätä ainakin 59.01%
Riittää jo!
Tehtävä 4.
a) Kirjoita ohjelma, joka kysyy käyttäjätunnusta ja salasanaa. Syötettäessä oikeat kirjautumistunnukset ohjelma tulostaa ”Tervetuloa!” Jos kirjautumistiedot ovat virheelliset, ohjelma tulostaa ”Väärä käyttäjätunnus tai salasana!”





Koodi:
k = input("Syötä käyttäjätunnus: ")
s = input("Syötä salasana: ")
if k == "Käyttäjät" and s == "salasana":
print("Tervetuloa!")
else:
print("Väärä käyttäjätunnus tai salasana!")
Tulosteet:
Tervetuloa!
Väärä käyttäjätunnus tai salasana!
b) Kirjautumistiedoista ei juuri ole hyötyä, jos ei ole toiminnallisuutta, johon pääsyä yritetään rajoittaa. Lisää ohjelmalle toiminnallisuudeksi salaisen viestin tulostus. Jos syötetään oikeat kirjautumistiedot, kysy käyttäjältä salaista viestiä, jonka ohjelma lopuksi tulostaa.






Koodi:
k = input("Syötä käyttäjätunnus: ")
s = input("Syötä salasana: ")
if k == "Käyttäjät" and s == "salasana":
print("Tervetuloa!")
v = input("Syötä salainen viesti: ")
print(v)
else:
print("Väärä käyttäjätunnus tai salasana!")
Tulosteet:
Tervetuloa!
Salainen viesti
Väärä käyttäjätunnus tai salasana!
c) Lisää ohjelmaan toinen käyttäjä. Hänen käyttäjätunnuksensa on ”KoodiVilho” ja salasana ”TaikaHiiri123”. Lisää hänelle myös salaiseksi viestiksi ”Osaan koodata.”







Koodi:
k = input("Syötä käyttäjätunnus: ")
s = input("Syötä salasana: ")
if k == "Käyttäjät" and s == "salasana":
print("Tervetuloa!")
v = input("Syötä salainen viesti: ")
print(v)
elif k == "KoodiVilho" and s == "TaikaHiiri123":
print("Tervetuloa!")
print("Osaan koodata.")
else:
print("Väärä käyttäjätunnus tai salasana!")
Tulosteet:
Tervetuloa!
Salainen viesti
Osaan koodata.
Väärä käyttäjätunnus tai salasana!
d) Lisää ohjelmaan jokaiselle käyttäjätunnukselle oma tervetuloviesti seuraavan esimerkin mukaisesti:
Tervetuloa KoodiVilho!







Koodi:
k = input("Syötä käyttäjätunnus: ")
s = input("Syötä salasana: ")
if k == "Käyttäjät" and s == "salasana":
print("Tervetuloa", k+"!")
v = input("Syötä salainen viesti: ")
print(v)
elif k == "KoodiVilho" and s == "TaikaHiiri123":
print("Tervetuloa", k+"!")
print("Osaan koodata.")
else:
print("Väärä käyttäjätunnus tai salasana!")
Tulosteet:
Tervetuloa Käyttäjät!
Salainen viesti
Tervetuloa KoodiVilho!
Osaan koodata.
Väärä käyttäjätunnus tai salasana!
e) Luo ensin käyttäjä ja salasana ja kysy sitten vasta kirjautumistunnuksia. Salasanan tulee olla vähintään 8 merkkiä pitkä.
Huom! Tähän ohjelmaan on lisätty toiminto, joka nollaa salasanan, jos se ei ole riittävän pitkä.









Koodi:
käyttis = input("Luo käyttäjätunnus: ")
print("Käyttäjätunnus asetettu!")
salis = input("Luo salasana (väh. 8 merkkiä): ")
if len(salis) < 8:
print("Salasanaa ei hyväksytty!")
salis = ""
print("Salasana nollattu.")
else:
print("Salasana asetettu!")
k = input("Syötä käyttäjätunnus: ")
s = input("Syötä salasana: ")
if k == käyttis and s == salis:
print("Tervetuloa", k+"!")
v = input("Syötä salainen viesti: ")
print(v)
elif k == "KoodiVilho" and s == "TaikaHiiri123":
print("Tervetuloa", k+"!")
print("Osaan koodata.")
else:
print("Väärä käyttäjätunnus tai salasana!")
Tulosteet:
Valintojen mukaisesti saattaa tulla seuraavat tulosteet:
Käyttäjätunnus asetettu!
Salasana asetettu!
tai jos salasana ei ole riittävän pitkä:
Salasanaa ei hyväksytty!
Salasana nollattu.
sekä:
Tervetuloa Erkki!
Salainen viesti
tai:
Tervetuloa KoodiVilho!
Osaan koodata.
Tehtävä 5.
a) Suomi on verrattain kylmä maa. Lämpötila saattaa kuitenkin vaihdella täällä vuodenaikojen mukaan jopa 60 astetta tai enemmän! Kirjoita ohjelma, joka tulostaa ”Kesäkelit!”, kun muuttujan lämpötila arvo on yli 15 astetta, ”Ihan hyvä keli.”, kun arvo on nollan ja 15:n välillä, ”Kylmä on.”, kun arvo on nollan ja -10:n välillä, ”Aika laittaa villapaita.”, kun -10:n ja -20:n välillä ja ”Nyt on talvi!”, kun arvo on vähemmän kuin -20.






Koodi:
lämpötila = 3
if lämpötila >= 15:
print("Kesäkelit!")
elif lämpötila >= 0:
print("Ihan hyvä keli.")
elif lämpötila >= -10 and lämpötila < 0:
print("Kylmä on.")
elif lämpötila >= -20 and lämpötila < -10:
print("Aika laittaa villapaita.")
elif lämpötila < -20:
print("Nyt on talvi!")
Tulosteet:
Kesäkelit!
Ihan hyvä keli.
Kylmä on.
Aika laittaa villapaita.
Nyt on talvi!
b) Lisää mahdollisuus lämpötilan syöttämiseen. Tulostuksen tulee edelleen olla oikeellinen joka lämpötilan kohdalla. Tässä kohdassa läpötila voi olla vielä kokonaisluku.







Koodi:
lämpötila = int(input("Syötä lämpötila: "))
if lämpötila >= 15:
print("Kesäkelit!")
elif lämpötila >= 0:
print("Ihan hyvä keli.")
elif lämpötila >= -10 and lämpötila < 0:
print("Kylmä on.")
elif lämpötila >= -20 and lämpötila < -10:
print("Aika laittaa villapaita.")
elif lämpötila < -20:
print("Nyt on talvi!")
Tulosteet:
Kesäkelit!
Ihan hyvä keli.
Kylmä on.
Aika laittaa villapaita.
Nyt on talvi!
c) Koko Suomen koko vuoden keskilämpötila on noin 2,9 (tämä nousee koko ajan). Ota syötteenä lämpötila liukulukuna ja ilmoita tulosteessa joka lämpötilan kohdalla, kuinka paljon syötetty lämpötila poikkeaa keskilämpötilasta.





Koodi:
lämpötila = float(input("Syötä lämpötila: "))
ero = "Ero keskilämpötilaan:"
if lämpötila >= 15:
print("Kesäkelit!")
print(ero,lämpötila-2.9)
elif lämpötila >= 0 and lämpötila == 2.9:
print("Ihan hyvä keli.")
print("Lämpötila on keskilämpötila!")
elif lämpötila >= 0:
print("Ihan hyvä keli.")
if lämpötila > 2.9:
print(ero,lämpötila-2.9)
else:
print(ero,2.9-lämpötila)
elif lämpötila >= -10 and lämpötila < 0:
print("Kylmä on.")
print(ero,2.9-lämpötila)
elif lämpötila >= -20 and lämpötila < -10:
print("Aika laittaa villapaita.")
print(ero,2.9-lämpötila)
elif lämpötila < -20:
print("Nyt on talvi!")
print(ero,2.9-lämpötila)
Tulosteet:
Kesäkelit!
Ihan hyvä keli.
Kylmä on.
Aika laittaa villapaita.
Nyt on talvi!
ja toiselle riville:
Ero keskilämpötilaan: ero
tai:
Lämpötila on keskilämpötila, jos lämpötilan arvo on tasan 2.9
d) Lisää vielä tuloste ”Tavallista vuodenaikavaihtelua.”, jos lämpötila poikkeaa keskilämpötilasta alle 30 astetta. Jos taas enemmän, tulostetaan ”Elämme omituisia aikoja.”
Tämän tehtävän ratkaisut saattavat näyttää hyvinkin erilaisilta. Tässä yksi esimerkki, josta näkee erään ratkaisuehdotuksen.







Koodi:
lämpötila = float(input("Syötä lämpötila: "))
ero = "Ero keskilämpötilaan:"
if lämpötila >= 15:
print("Kesäkelit!")
print(ero,lämpötila-2.9)
if lämpötila-2.9>=30:
print("Elämme omituisia aikoja.")
else:
print("Tavallista vuodenaikavaihtelua.")
elif lämpötila >= 0 and lämpötila == 2.9:
print("Ihan hyvä keli.")
print("Lämpötila on keskilämpötila!")
elif lämpötila >= 0:
print("Ihan hyvä keli.")
if lämpötila > 2.9:
print(ero,lämpötila-2.9)
else:
print(ero,2.9-lämpötila)
print("Tavallista vuodenaikavaihtelua.")
elif lämpötila >= -10 and lämpötila < 0:
print("Kylmä on.")
print(ero,2.9-lämpötila)
print("Tavallista vuodenaikavaihtelua.")
elif lämpötila >= -20 and lämpötila < -10:
print("Aika laittaa villapaita.")
print(ero,2.9-lämpötila)
print("Tavallista vuodenaikavaihtelua.")
elif lämpötila < -20:
print("Nyt on talvi!")
print(ero,2.9-lämpötila)
if 2.9-lämpötila>=30:
print("Elämme omituisia aikoja.")
else:
print("Tavallista vuodenaikavaihtelua.")
Tulosteet:
Kesäkelit!
Ihan hyvä keli.
Kylmä on.
Aika laittaa villapaita.
Nyt on talvi!
ja lisäksi toiselle riville:
Lämpötila on keskilämpötila!
tai:
Ero keskilämpötilaan: ero
jonka jälkeen kolmannelle riville:
Tavallista vuodenaikavaihtelua.
tai:
Elämme omituisia aikoja.
Tehtävä 6.
a) Kuten on aikaisemmin huomattu, valintalausekkeissa voi olla useampia ehtoja peräkkäin. Kun laitetaan ne saman ehtolausekkeen sisälle, vältytään useammilta ehtorakenteilta. Kirjoita ohjelma, joka ottaa syötteenä kokonaislukuarvon ja tee sille seuraavat toimenpiteet yhden ehtolauseen sisällä:
Varmista, että luku on suurempi kuin 15, mutta pienempi kuin 40.
Varmista lisäksi, että luku on parillinen.
Varmista, että luku ei ole tasan 20.
Tämän jälkeen tulosta luku.



Koodi:
luku = int(input("Syötä kokonaisluku: "))
if luku > 15 and luku < 40 and luku % 2 == 0 and luku != 20:
print(luku)
Tuloste:
Syötetty luku, jos sopii ehtoihin, esim. 30
b) Lisää ohjelmaan tulostus ”Luku ei ole kelvollinen.”, mikäli jokin ehdoista ei pidä paikkaansa.
Tässä todennäköisesti tarvitaan muitakin valintarakenteita.




Koodi:
luku = int(input("Syötä kokonaisluku: "))
if luku > 15 and luku < 40 and luku % 2 == 0 and luku != 20:
print(luku)
else:
print("Luku ei ole kelvollinen.")
Tuloste:
Jos on kelvollinen:
luku
Jos ei:
Luku ei ole kelvollinen.
c) Oikeellisen luvun määritelmää on nyt muutettu. Luvun tulee olla 15 ja 45 välillä, eikä se saa olla parillinen. Luvut 21, 23 ja 25 on kielletty.
Yritä saada mahdollisuuksien mukaan saada nämäkin yhden ehtolauseen sisälle.

Koodi:
luku = int(input("Syötä kokonaisluku: "))
if luku > 15 and luku < 45 and luku % 2 == 1 and luku != 21 and luku != 23 and luku != 25:
print(luku)
else:
print("Luku ei ole kelvollinen.")


Tuloste:
Jos on kelvollinen:
luku
Jos ei:
Luku ei ole kelvollinen.
d) Ehdot ovat muuten vastaavat kuin c-kohdassa, mutta mikäli luku sattuisi olemaan parillinen, tulee se silti tulostaa seuraavan esimerkin mukaisesti:
34, HUOM PARILLINEN!
Tästä eteenpäin tarvitaan todennäköisesti muitakin valintarakenteita.

Koodi:
luku = int(input("Syötä kokonaisluku: "))
if luku > 15 and luku < 45 and luku % 2 == 1 and luku != 21 and luku != 23 and luku != 25:
print(luku)
elif luku > 15 and luku < 45 and luku % 2 == 0:
print(str(luku)+", HUOM PARILLINEN!")
else:
print("Luku ei ole kelvollinen.")



Tulosteet:
Jos on kelvollinen:
luku
Jos on muuten, mutta on parillinen:
luku, HUOM PARILLINEN!
Muutoin:
Luku ei ole kelvollinen.
e) Ehdot ovat muuten vastaavat kuin edellisissä kohdissa, mutta tapauksissa, joissa luku on parillinen, lisätään lukuun 1. Luku ei edelleenkään saa olla kiellettyjen lukujen joukossa. Jos luku oli parillinen, tulostetaan se lisättynä yhdellä.

Koodi:
luku = int(input("Syötä kokonaisluku: "))
if luku > 15 and luku < 45 and luku % 2 == 1 and luku != 21 and luku != 23 and luku != 25:
print(luku)
elif luku > 15 and luku+1 < 45 and luku % 2 == 0 and luku+1 != 21 and luku+1 != 23 and luku+1 != 25:
print(luku+1)
else:
print("Luku ei ole kelvollinen.")



Tulosteet:
luku, jos on kelvollinen tai jos luku+1 on kelvollinen
Muutoin:
Luku ei ole kelvollinen.
f) Ehtoja on löysennetty hieman. Nyt riittää, että luku ei ole parillinen tai että se on alle 45. Luvut 21, 23 ja 25 on edelleen kielletty. 45:ttä suurempiin parillisiin lukuihin tulee edelleen lisätä 1.

Koodi:
luku = int(input("Syötä kokonaisluku: "))
if (luku < 45 or luku % 2 == 1) and luku != 21 and luku != 23 and luku != 25:
print(luku)
elif luku % 2 == 0:
print(luku+1)
else:
print("Luku ei ole kelvollinen.")


Tehtävä 7.
a) Matematiikassa luvut voivat olla suljetuilla tai avoimilla väleillä. Kirjoita ohjelma, joka ottaa syötteenä liukuluvun ja tulostaa ”Välillä”, jos se on välillä [50:80[ ja ”Ulkona”, jos se on välin ulkopuolella.




Koodi:
luku = float(input("Syötä luku: "))
if luku >= 50 and luku < 80:
print("Välillä")
else:
print("Ulkona")
Tulosteet:
Välillä
Ulkona
b) Lisätään ohjelmaan tulostus ”Siellä päin”, jos luku on välillä [30:100]. Jos luku ei kuitenkaan ole tälläkään välillä, tulostetaan ”Aivan metikössä”.





Koodi:
luku = float(input("Syötä luku: "))
if luku >= 50 and luku < 80:
print("Välillä")
elif luku >= 30 and luku <= 100:
print("Siellä päin")
elif luku < 30 or luku > 100:
print("Aivan metikössä")
Tulosteet:
Välillä
Siellä päin
Aivan metikössä
c) Lisätään vielä tulostukseksi ”Ei sentään negatiivinen”, jos luku ei ole välin [0:100] ulkopuolella. Jos luku on tämän välin ulkopuolella, tulostetaan ”Ollaan hukassa”.






Koodi:
luku = float(input("Syötä luku: "))
if luku >= 50 and luku < 80:
print("Välillä")
elif luku >= 30 and luku <= 100:
print("Siellä päin")
elif luku < 30 or luku > 100:
if luku >= 0 and luku <= 100:
print("Ei sentään negatiivinen")
elif luku < 0 or luku > 100:
print("Ollaan hukassa")
Tulosteet:
Välillä
Siellä päin
Ei sentään negatiivinen
Ollaan hukassa.
d) Jos ohjelma ei vielä tee niin, tulosta kaikki tarvittavat virheviestit järjestyksessä sen mukaan, minkä kaikkien välien ulkopuolella luku on. Tulosta silti myös viesti, jos luku on jollain välillä tai ei ole sen ulkopuolella. Virheviestit ja niiden järjestys on:
Ulkona
Aivan metikössä
Ollaan hukassa
ELI TÄSSÄ TULEE TULOSTEEKSI SIIS MAX 4 RIVIÄ TULOSTETTA.
TARKISTA VIELÄ TULOSTE! TULEEKO Siellä päin OLLENKAAN






Koodi:
luku = float(input("Syötä luku: "))
if luku >= 50 and luku < 80:
print("Välillä")
else:
print("Ulkona")
if luku >= 30 and luku <= 100:
print("Siellä päin")
elif luku < 30 or luku > 100:
print("Aivan metikössä")
if luku >= 0 and luku <= 100:
print("Ei sentään negatiivinen")
if luku < 0 or luku > 100:
print("Ollaan hukassa")
e) Siistitään tulostetta. Tulosta luvun ollessa välin ulkopuolella vain yksi edellisen kohdan virheviesteistä riippuen siitä, kuinka paljon luku on välin ulkopuolella, eli onko se välin [50:80[, [30:100] vai vielä [0:100]:n ulkopuolella.
TÄSSÄ TULEE TULOSTEEKSI MAX 2 RIVIÄ.
TARKISTA VIELÄ TULOSTE! TULEEKO Ei sentään negatiivinen OIKEASSA KOHDASSA






Koodi:
luku = float(input("Syötä luku: "))
taso = 0
if luku >= 0 and luku <= 100:
taso += 1
if luku >= 30 and luku <= 100:
taso += 1
if luku >= 50 and luku < 80:
taso += 1
print("Välillä")
else:
print("Ulkona")
if taso == 2:
print("Siellä päin")
else:
print("Aivan metikössä")
if taso == 1:
print("Ei sentään negatiivinen")
else:
print("Ollaan hukassa")
f) Tuloste on nyt siisti ja ihmiselle tulkittavissa, mutta sitä voisi saada helppolukuisemmaksi lisäämällä tulosteeseen ’mutta’ ja sitten loppuosa seuraavan esimerkin mukaisesti:
Ulkona, mutta siellä päin.
TULOSTEENA 1 RIVI
Tässä tehtävässä voi käyttää merkkijonoa muokkaavia metodeja. Voishan tuon tehdä helpomminkin, että vaan lisäis sitten merkkijonoon kovakoodatusti ton viestin loppuosan.
(tyyppimetodi / merkkijonometodi)
SAMA TÄSSÄ. VASTAAKO Ei sentään negatiivinen OIKEASTI SITÄ MITÄ TAPAHTUU
Tämä on yksi ratkaisu, jossa hyödynnetään muuttujia ja merkkijonometodeita. Vaihtoehtoisia ratkaisuja on monia ja jos tulostus on oikeellinen, ei sisällöllä välttämättä ole väliä.






Koodi:
luku = float(input("Syötä luku: "))
taso = 0
printti = ""
sielpäi = "Siellä päin"
negis = "Ei sentään negatiivinen"
if luku >= 0 and luku <= 100:
taso += 1
if luku >= 30 and luku <= 100:
taso += 1
if luku >= 50 and luku < 80:
taso += 1
printti += "Välillä"
else:
printti += "Ulkona"
if taso == 2:
printti += ", mutta " + sielpäi.lower() + "."
else:
printti += "Aivan metikössä"
if taso == 1:
printti += ", mutta " + negis.lower() + "."
else:
printti += "Ollaan hukassa"
print(printti)
g) Matemaatikot ovat todenneet virheviestit tarpeettomiksi, jos luku on jollain mainituista väleistä. Viesti tulee selkeäksi pelkästään yhden rivin tulosteella. Älä tulosta virheviestejä, jos luku on jollain välillä. (Mieti, mitkä virheviesteistä ovat oikeastaan tarpeellisia.)
TULOSTEENA 1 RIVI
NÄISSÄ ON SELVÄSTI AJATELTU, ETTÄ Ei sentään negatiivinen PITÄÄ SISÄLLÄÄN SEN, ETTÄ LUKU ON MYÖS ALLE 100. EHTO ON AINA SAMANLAINEN. VOI OLLA SILLAI, MUTTA VOI OLLA MYÖS LISÄEHTO. EMT.






Koodi:
luku = float(input("Syötä luku: "))
if luku >= 50 and luku < 80:
print("Välillä")
else:
if luku >= 30 and luku <= 100:
print("Siellä päin")
else:
if luku >= 0 and luku <= 100:
print("Ei sentään negatiivinen")
else: print("Ollaan hukassa")
Tehtävä 8.
a) Aina ei ole viisasta laittaa kaikkia ehtoja saman valintalausekkeen sisälle, sillä niiden pituus voi monimutkaisissa ehdoissa karata käsistä. Kirjoita ohjelma, joka ottaa syötteenä kokonaisluvun, jolle tehdään seuraavat tarkistukset:
Luvun tulee olla väliltä [60:80].
Luvun tulee olla pariton.
Luku ei saa olla 61, 65, 71, 75 tai 79.
Jos ehdot pätevät, ohjelma tulostaa luvun.

Koodi:
luku = int(input("Syötä kokonaisluku: "))
if luku >= 60 and luku <= 80 and luku % 2 == 1 and luku != 61 and luku != 65 and luku != 71 and luku != 75 and luku != 79: print(luku)

Tulosteena kelvollinen luku.
b) Ehtolauseita voi jakaa pienempiin osiin tekemällä useampia ehtolauseita. Erottele yllä mainitut ehdot erillisiksi sisäkkäisiksi ehtolauseiksi.

Koodi:
luku = int(input("Syötä kokonaisluku: "))
if luku >= 60 and luku <= 80:
if luku % 2 == 1:
if luku != 61 and luku != 65 and luku != 71 and luku != 75 and luku != 79:
print(luku)

Tulosteena kelvollinen luku
c) Useimmiten b-kohdan kaltaiset sisäkkäiset ehtorakenteet eivät ole suositeltavia, sillä koodista tulee sotkuisen näköistä ja on vaikea pysyä kärryillä, missä koodilohkossa oikeasti ollaan, jos kyseessä on monimutkaisempi ehtorakenne. Pythonin syntaksissa sisennys on oleellinen osa, mikä toisaalta pakottaa pitämään koodin suhteellisen siistinä siinä suhteessa (useissa ohjelmointikielissä sisennykset eivät ole pakollisia). Kuitenkin sisennyskin voi tehdä koodista vaikeaselkoisempaa. Jos sisennyksiä on käytetty paljon, saattaa koodia ymmärtääkseen tarvita viivoitinta.
Näistä syistä sisennyksien (tai sisäkkäisten ehtorakenteiden) liiallinen käyttö ei ole suositeltavaa, vaan ongelmat voi ratkaista muulla tavoin. Joskus ohjelman suorituksen voi lopettaa esimerkiksi jo ensimmäisen tarkistuksen kohdalla.
Kirjoita ohjelma siten, että ehtolauseet eivät ole sisäkkäin. Voit lopettaa ohjelman kulun lisäämällä exit() ehtolauseen jälkeen. Tällainen rakenne myöskin nopeuttaa ohjelman suorittamista, sillä exit():in tai muun vastaavan lauseen jälkeisiä rivejä ei suoriteta.

Koodi:
luku = int(input("Syötä kokonaisluku: "))
if not luku >= 60 and luku <= 80:
exit()
if not luku % 2 == 1:
exit()
if luku != 61 and luku != 65 and luku != 71 and luku != 75 and luku != 79:
print(luku)

Tulosteena kelvollinen luku
d) Tässä vaiheessa emme kuitenkaan turvaudu exit():in kaltaisiin lauseisiin, sillä ne eivät sisälly oppimäärään. Vaihtoehtona ehtojen peräkkäin laittamiselle voimme kaunistaa koodia sulkeiden avulla. Vaikka Pythonissa sisennys ja rivitys kuuluu olennaisesti syntaksiin, voimme muun muassa sulkeiden avulla kiertää tämän ja rivittää sulkeiden sisällä olevan koodin siten kuin haluamme.
Muuta ehto alkuperäisen muotoiseksi sulkeiden sisään ja rivitä se vähintään kolmelle riville erotellen eri tarkistuksia.


Koodi:
luku = int(input("Syötä kokonaisluku: "))
if (luku >= 60 and luku <= 80
and luku % 2 == 1
and luku != 61 and luku != 65
and luku != 71 and luku != 75
and luku != 79):
print(luku)
Tulosteena kelvollinen luku
