Skip to content

Instantly share code, notes, and snippets.

@juvuorin
Last active April 24, 2020 11:05
Show Gist options
  • Save juvuorin/306943d491dbe147b5cd264879aa6408 to your computer and use it in GitHub Desktop.
Save juvuorin/306943d491dbe147b5cd264879aa6408 to your computer and use it in GitHub Desktop.
koiramainenOhjelmointikisa2020
import datetime
# muutetaan nimi TIKKUKIRJAIMIKSI, jottei todistuksessa näkyisi esim. käyttäjän virheellisesti syöttämää pientä alkukirjainta
nimi = input("Anna koiran nimi: ").upper()
# mietinnässä oli myös yksi ainoa while loop, jossa metodit määräytyisivät käyttäjän syötteen perusteella (esim. jos
# syötteessä "lisää", lisätään oppiaine, arvosana, ja splitataan esim. pilkulla, tehdään listaa jne.). Toteutustavaksi
# valikoitui kuitenkin jokaiselle oppiaineelle omat eksplisiittiset loopit, jotta käyttäjävirheiltä vältyttäisiin
# (unohtaa merkitä jonkin oppiaineen, kirjoittaa väärin yms.)
# tärkeäksi valikoitui myös se, että mahdolliset virheelliset syötteet saadaan rajattua pois
# ideaalein tapa olisi varmastikin tehdä erikseen front, jossa olisi jo valmiina oikea formi, joka täytetään
# ja lähetetään - siitä saataisiin tarvittavat tiedot helposti
while True:
try:
arvosana = int(input("Pupun jäljestys (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
pupunjaljestys = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
while True:
try:
arvosana = int(input("Hirven jäljestys (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
hirvenjaljestys = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
while True:
try:
arvosana = int(input("Linnun noutaminen (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
linnunnoutaminen = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
metsastys = int(pupunjaljestys) + int(hirvenjaljestys) + int(linnunnoutaminen)
print("Kiitos! Arvosana koiralle " + nimi + " aineessa Metsästys on " + str(metsastys))
print("-----------")
while True:
try:
arvosana = int(input("Lumen pöllyytys (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
lumenpollyytys = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
while True:
try:
arvosana = int(input("Kukkapenkkien kaivaminen (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
kukkapenkkienkaivuu = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
pihatyot = int(lumenpollyytys) + int(kukkapenkkienkaivuu)
print("Kiitos! Arvosana koiralle " + nimi + " aineessa Pihatyöt on " + str(pihatyot))
print("------------")
while True:
try:
arvosana = int(input("Parvekkeen vahtiminen (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
parvekevahti = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
while True:
try:
arvosana = int(input("Luun piilottaminen (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
piilotettuluu = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
while True:
try:
arvosana = int(input("Oman hännän jahtaaminen (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
omahanta = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
while True:
try:
arvosana = int(input("Kuun ulvonta (anna arvosana numerona väliltä 4-10): "))
except ValueError:
print("Hups, arvosana on annettava lukuna, yritä uudestaan")
continue
else:
if int(arvosana) >= 4 and int(arvosana) <= 10:
kuunulvonta = arvosana
break
else:
print("Hups, näppäilyvirhe, yritä uudestaan")
continue
muut = int(parvekevahti) + int(piilotettuluu) + int(omahanta) +int(kuunulvonta)
print("Kiitos! Arvosana koiralle " + nimi + " aineessa Muut on " + str(muut))
print("------------")
print("Tässä vielä kooste koiran " + nimi + " arvosanoista:\n")
print("Metsästys " + str(metsastys))
print("Pihatyöt " + str(pihatyot))
print("Muut " + str(muut))
print("\nTodistus tulostuu tiedostoon nimeltä " + nimi + ".txt")
today = datetime.date.today()
tulokset = open(nimi + ".txt", "w")
tulokset.write(nimi + "\n"
"\n""Metsästys " + str(metsastys) +
"\n" +
"\n""Pihatyöt "+ str(pihatyot) +
"\n" +
"\n""Muut " + str(muut) +
"\n""\n""Todistus on tulostettu " + str(today))
tulokset.close()
@juvuorin
Copy link
Author

juvuorin commented Apr 24, 2020

Hyvä perusratkaisu! Hyvä, että virhetilanteet on otettu hallintaan ja virhetilanteita on pohdittu. Tästä on hyvä lähteä pohtimaan ohjelman kehittämistä!

Kehitysajatuksia

Voisiko ajatella, että toistoa pystyisi vähentämään rakentamalla funktioita? Lisäksi voisi miettiä, voisiko syötteen lukemisen ja kirjoittamisen sekä itse ohjelman logiikan erottaa paremmin toisistaan? Tästä on hyvä jatkaa tutkimalla esim. funktion käsitettä.

Nyt sekä logiikka, että syötteen lukeminen ja kirjoittaminen muodostavat yhden kokonaisuuden, mikä johtaa siihen, että koodia on vaikea kehittää edelleen. Lisäksi "frontin" pohtiminen vie ehkä ajatuksia sivuraiteelle itse ongelmasta - frontin, lomakkeen tai jonkin muun "esitysmuodon" voi pohtia erikseen ja se pitäisikin pohtia erikseen varsinaisen tiedonkäsittelyongelman ratkaisusta. Näin tiedonkäsittelyongelma ja tiedonesitysongelma voidaan pitää erillään. Jos näin toimitaan, ohjelmaa voidaan kehittää helpommin.

Tavallaan pohdintasi siitä, että "ensin tehdään front ja tiedot lähetetään jonnekin" on tavallaan oikea: ensin on kaikki tieto jossain ja sitten tieto prosessoidaan jossain (funktiossa) ja lopulta meillä on jokin lopputulos. Katso vastauksia, joissa tieto on määritelty esim. Pythonin dictinarylla ja tutki, miten niissä vastauksissa tieto käsitellään "kerralla". Tästä on hyvä jatkaa!

Vaikka monilla ohjelmointkursseilla korostetaankin eri välineitä, ohjelmoinnin opiskelun alkuvaiheissa kannattaa unohtaa välineet (frontit, backit, eri ohjelmointivälineet, jne) ja esitysmuodot ja keskittyä tiedonkäsittelyongelman kuvaamiseen. Näin opiskelu on jatkossa helpompaa.

Tsemppiä ohjelmointihommiin!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment