Advertisement
Guest User

Untitled

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