Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # TIE-02100
- 2 # Kulujen tasaus
- 3 # Joonas Mustonen, 257103
- 4
- 5
- 6 def muuta_sanakirjaksi(tiedosto):
- 7
- 8 # Muutetaan avattu tiedosto sanakirjaksi
- 9 # Jos rivi ei ole tiedostossa muotoa nimi:summa, tulostetaan
- 10 # virheilmoitus ja ohjelmaa ei jatketa.
- 11
- 12 nimet = {}
- 13 virheet = 0
- 14 try:
- 15 lähtötiedosto = open(tiedosto, 'r')
- 16 try:
- 17 for rivi in lähtötiedosto:
- 18 rivi = rivi.rstrip()
- 19 if ":" in rivi:
- 20 rivi = rivi.split(":")
- 21 nimi = rivi[0]
- 22 rahat = float(rivi[1])
- 23 if nimi in nimet:
- 24 nimet[nimi] += rahat
- 25 else:
- 26 nimet[nimi] = rahat
- 27 else:
- 28 print("Virhe! Tiedoston rivien pitää olla muotoa"
- 29 " nimi:summa.")
- 30 virheet += 1
- 31 lähtötiedosto.close()
- 32 except ValueError:
- 33 print("Virhe! Tiedoston rivien pitää olla muotoa"
- 34 " nimi:summa.")
- 35 virheet += 1
- 36 except OSError:
- 37 print("Virhe! Tiedostoa", tiedosto, "ei voida lukea.")
- 38 if virheet == 0:
- 39 return nimet
- 40 else:
- 41 nimet = {}
- 42 return nimet
- 43
- 44 def laske_kokonaiskustannukset(kulutiedosto):
- 45
- 46 # Lasketaan kokonaiskustannukset
- 47
- 48 kokonaiskustannukset = 0
- 49 for nimi in kulutiedosto:
- 50 kokonaiskustannukset += float(kulutiedosto[nimi])
- 51 print("Kokonaiskustannukset ovat: {:.2f}e".format(kokonaiskustannukset))
- 52 return kokonaiskustannukset
- 53
- 54 def tasaa_kulut(kulutiedosto, kustannukset):
- 55
- 56 # Lasketaan jokaisen maksettava tai saatava osuus ja tulostetaan ne
- 57
- 58 jaetut_kustannukset = kustannukset / len(kulutiedosto)
- 59 for nimi in sorted(kulutiedosto):
- 60 maksettu = float(kulutiedosto[nimi])
- 61 tasaus = jaetut_kustannukset - maksettu
- 62 if tasaus <= 0.05 and tasaus >= -0.05:
- 63 print(nimi, "on maksanut {:.2f}e, eikä hänellä ole maksettavaa"
- 64 " tai saatavaa.".format(maksettu))
- 65 elif tasaus > 0.05:
- 66 print(nimi, "on maksanut {:.2f}e, hänen pitää maksaa vielä"
- 67 " {:.2f}e.".format(maksettu, tasaus))
- 68
- 69 else:
- 70 print(nimi, "on maksanut {:.2f}e, hänen pitää saada takaisin"
- 71 " {:.2f}e.".format(maksettu, (tasaus * (-1))))
- 72
- 73
- 74 def main():
- 75 tiedoston_nimi = input("Anna tiedoston nimi: ")
- 76 kulutiedosto = muuta_sanakirjaksi(tiedoston_nimi)
- 77 if len(kulutiedosto) != 0:
- 78 kokonaiskustannukset = laske_kokonaiskustannukset(kulutiedosto)
- 79 tasaa_kulut(kulutiedosto, kokonaiskustannukset)
- 80
- 81 main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement