Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1.  
  2. # Harjoitustyön kirjasto, jossa on kaikki aliohjelmat. Ohjelma lukee,
  3. # analysoi ja kirjoittaa ilmatieteenlaitoksen datasta paisteaikoja.
  4.  
  5. # Luokka jossa on päivämäärä, kellonaika ja paisteaika.
  6. import itertools
  7. class DATA:
  8. def __init__(self,pvm,klo,paisteaika):
  9. self.pvm = pvm
  10. self.klo = klo
  11. self.paisteaika = paisteaika
  12.  
  13. # Aliohjelma kysyy havaintoaseman nimeä ja vuotta.
  14.  
  15. def kysytiedot():
  16. havaintoasema = input("Anna havaintoaseman nimi: ")
  17. try:
  18. vuosi = int(input("Anna analysoitava vuosi: "))
  19. except ValueError:
  20. print("Anna vuosiluku kokonaislukuna.")
  21. print()
  22. return [havaintoasema, vuosi]
  23.  
  24. # Aliohjelma lukee tiedoston ja lisää datan olioihin ja listaan.
  25.  
  26. def luetiedosto(tiedot):
  27. import sys
  28. lista = []
  29. tiedostonimi = "{}{}.txt".format(tiedot[0], str(tiedot[1]))
  30. try:
  31. tiedosto = open(tiedostonimi, "r")
  32. except FileNotFoundError:
  33. print("Tiedoston '{}' avaaminen epäonnistui.".format(tiedostonimi))
  34. sys.exit(0)
  35.  
  36. try:
  37. rivit = tiedosto.readlines()
  38. except IOError:
  39. print("Tiedoston '{}' lukeminen epäonnistui.".format(tiedostonimi))
  40.  
  41. for i in range(1,len(rivit)):
  42. rivi = rivit[i]
  43. sarakkeet = rivi.split(';')
  44. data = DATA(sarakkeet[0],sarakkeet[1],sarakkeet[2])
  45. lista.append(data)
  46. print("Tiedosto '{}' luettu. Tiedostossa oli {} riviä.".format(tiedostonimi, len(rivit) + 1))
  47. tiedosto.close()
  48. print()
  49. return lista
  50.  
  51. # Aliohjelma analysoi ja laskee paisteaikoja.
  52.  
  53. def analysoitiedosto(lista):
  54. sanakirj = {}
  55. for i in lista:
  56. sanakirj[i.pvm] = 0
  57. for i in lista:
  58. sanakirj[i.pvm] += int(i.paisteaika)
  59. lista2 = itertools.islice(lista, 0, None, 24)
  60. päivämäärät = []
  61. ajat = []
  62. summa = 0
  63. for i in lista2:
  64. numerot = i.pvm.split("-")
  65. päivämäärät.append("{}.{}.{}".format(numerot[2],numerot[1],numerot[0]))
  66. summa += int(sanakirj[i.pvm])
  67. ajat.append(int(summa/60))
  68. tiedot = [päivämäärät,ajat]
  69. print("Data analysoitu ajalta {} - {}.".format(päivämäärät[0],päivämäärät[-1]))
  70. print()
  71. return tiedot
  72.  
  73. # Aliohjelma kirjoittaa analysoidut tulokset käyttäjän syöttämään tiedostoon.
  74.  
  75. def tallennatiedot(havaintoasema,tiedot):
  76. import sys
  77. tiedostonimi = input("Anna tulostiedoston nimi: ")
  78. try:
  79. tiedosto = open(tiedostonimi,"w")
  80. except PermissionError:
  81. print("Tiedoston '{}' avaaminen epäonnistui.".format(tiedostonimi))
  82. sys.exit(0)
  83.  
  84. try:
  85. tiedosto.write("Pvm")
  86. for i in tiedot[0]:
  87. tiedosto.write(";"+i)
  88. tiedosto.write("\n{}".format(havaintoasema))
  89. for i in tiedot[1]:
  90. tiedosto.write(";"+str(i))
  91. tiedosto.write("\n")
  92. except FileNotFoundError:
  93. print("Tiedoston '{}' kirjoittaminen epäonnistui.".format(tiedostonimi))
  94.  
  95. tiedosto.close()
  96. print("Paisteaika tallennettu tiedostoon '{}'.".format(tiedostonimi))
  97. print()
  98. return None
  99.  
  100.  
  101.  
  102. # Ohjelman valikko.
  103.  
  104. def valikko():
  105. print("Mitä haluat tehdä:")
  106. print("1) Anna havaintoasema ja vuosi")
  107. print("2) Lue säätilatiedosto")
  108. print("3) Analysoi päivittäiset säätilatiedot")
  109. print("4) Tallenna päivittäiset säätilatiedot")
  110. print("0) Lopeta")
  111. try:
  112. valinta = int(input("Valintasi: "))
  113. return valinta
  114. except ValueError:
  115. print("Anna valinta kokonaislukuna.")
  116. return valinta
  117.  
  118.  
  119. ________________________________________________________________________________
  120.  
  121. ######################################################################
  122. # CT60A0203 Ohjelmoinnin perusteet
  123. # Tekijä: Timi Sivonen
  124. # Opiskelijanumero: 0570452
  125. # Päivämäärä: 17.11.2019
  126. # Yhteistyö ja lähteet, nimi ja yhteistyön muoto: Yksin, python.org, realpython.com
  127. # HUOM! KAIKKI KURSSIN TEHTÄVÄT OVAT HENKILÖKOHTAISIA!
  128. ######################################################################
  129.  
  130. # Pääohjelma joka pyörittää loopilla HT_kirjastostosta aliohjelmia käyttäjän valintojen mukaan.
  131. # Ohjelma lukee, analysoi ja kirjoittaa paisteaikoja ilmatieteenlaitoksen datasta.
  132.  
  133. def paaohjelma():
  134. import HT_kirjasto
  135. while True:
  136. toiminto = HT_kirjasto.valikko()
  137.  
  138. if toiminto == 1:
  139. tiedot = HT_kirjasto.kysytiedot()
  140.  
  141. elif toiminto == 2:
  142. try:
  143. lista = HT_kirjasto.luetiedosto(tiedot)
  144. except UnboundLocalError:
  145. print("Valitse havaintoasema ja vuosi ennen tiedostonlukua.")
  146. exit(0)
  147.  
  148. elif toiminto == 3:
  149. try:
  150. analysoitu = HT_kirjasto.analysoitiedosto(lista)
  151. except UnboundLocalError:
  152. print("Lista on tyhjä. Lue ensin tiedosto.")
  153.  
  154. elif toiminto == 4:
  155. try:
  156. HT_kirjasto.tallennatiedot(tiedot[0],analysoitu)
  157. except UnboundLocalError:
  158. print("Lista on tyhjä. Lue ensin tiedosto.")
  159.  
  160. elif toiminto == 0:
  161. print("Kiitos ohjelman käytöstä.")
  162. break
  163.  
  164. else:
  165. print("Valintaa ei tunnistettu, yritä uudestaan.")
  166. print()
  167.  
  168.  
  169.  
  170. paaohjelma() # Pääohjelmakutsu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement