Advertisement
Guest User

Untitled

a guest
Nov 29th, 2015
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.08 KB | None | 0 0
  1. class Kulkukortti:
  2.  
  3. def __init__(self, tunniste, nimi):
  4. """ Luokan rakentaja
  5. :param tunniste: henkilön tunniste (str)
  6. :param nimi: henkilön nimi (str)
  7. """
  8. self.__tunniste = tunniste
  9. self.__nimi = nimi
  10. self.__kulkulista = []
  11.  
  12. def tee_lista(self, lista_alueista):
  13. self.__kulkulista = lista_alueista
  14.  
  15. def tulosta_tiedot(self):
  16. kulkualueet = ""
  17.  
  18. for kulkualue in sorted(self.__kulkulista):
  19. kulkualueet += kulkualue + ","
  20.  
  21. kaikki_alueet = kulkualueet.rstrip(",")
  22. print(self.__tunniste, ", ", self.__nimi,", kulkualueet: ", kaikki_alueet, sep="")
  23.  
  24. def anna_nimi(self):
  25. """ Palauttaa kulkukortille talletetun henkilön nimen."""
  26. return self.__nimi
  27.  
  28. def tarkista_pääsy(self, ovi):
  29.  
  30. for n in range(len(ovi)+1):
  31. if ovi[:n+1] in self.__kulkulista:
  32. return True
  33.  
  34. return False
  35.  
  36. def lisää_kulkualue(self, uusi_alue):
  37. uudet_oikeudet = []
  38. poistettavat_oikeudet = []
  39.  
  40. for oikeus in self.__kulkulista:
  41.  
  42. if uusi_alue[0] != oikeus[0]:
  43. if uusi_alue not in uudet_oikeudet:
  44. uudet_oikeudet.append(uusi_alue)
  45.  
  46. elif uusi_alue[0] == oikeus[0]:
  47.  
  48. if len(uusi_alue) > len(oikeus) and oikeus in uusi_alue:
  49. pass
  50.  
  51. elif uusi_alue in oikeus:
  52. poistettavat_oikeudet.append(oikeus)
  53. if uusi_alue not in uudet_oikeudet:
  54. uudet_oikeudet.append(uusi_alue)
  55.  
  56. elif uusi_alue not in oikeus:
  57. if uusi_alue not in uudet_oikeudet:
  58. uudet_oikeudet.append(uusi_alue)
  59.  
  60.  
  61. for arvo in self.__kulkulista:
  62.  
  63. if arvo not in poistettavat_oikeudet:
  64. uudet_oikeudet.append(arvo)
  65.  
  66. self.__kulkulista = uudet_oikeudet
  67.  
  68.  
  69. def yhdistä_kulkukortti(self, toinen_kortti):
  70. virhe = 0
  71.  
  72. for oikeus in toinen_kortti:
  73.  
  74. if len(oikeus) == 1:
  75. uudet_oikeudet = []
  76.  
  77. for kulkuoikeus in self.__kulkulista:
  78. if kulkuoikeus[0] == oikeus:
  79. pass
  80. else:
  81. uudet_oikeudet.append(kulkuoikeus)
  82. uudet_oikeudet.append(oikeus)
  83. self.__kulkulista = uudet_oikeudet
  84.  
  85. elif len(oikeus) == 2:
  86. for kulkuoikeus in self.__kulkuoikeudet:
  87. if kulkuoikeus == oikeus[0] or kulkuoikeus == oikeus:
  88. virhe = 1
  89. break
  90. elif oikeus in kulkuoikeus:
  91. self.__kulkuoikeudet.remove(kulkuoikeus)
  92. if virhe != 1:
  93. self.__kulkuoikeudet.append(oikeus)
  94.  
  95. elif len(oikeus) >= 3:
  96. for kulkuoikeus in self.__kulkuoikeudet:
  97. if kulkuoikeus in oikeus:
  98. virhe = 1
  99. break
  100. if oikeus in kulkuoikeus:
  101. self.__kulkuoikeudet.remove(kulkuoikeus)
  102. if virhe != 1:
  103. self.__kulkuoikeudet.append(oikeus)
  104.  
  105.  
  106.  
  107.  
  108. def main():
  109. tiedosto = open("kulkutiedot.txt", "r", encoding="UTF-8")
  110. kulkukortit = {}
  111.  
  112. try:
  113.  
  114. for rivi in tiedosto:
  115. rivi = rivi.rstrip()
  116.  
  117. kentät = rivi.split(';')
  118. tunniste = kentät[0]
  119. nimi = kentät[1]
  120. kulkukortti = Kulkukortti(tunniste, nimi)
  121. alueet = kentät[2]
  122. lista_alueista = alueet.split(",")
  123.  
  124. kulkukortit[tunniste] = kulkukortti #??? dicti jonka sisällä on olio kulkukortit[tunniste] on olion nimi
  125. kulkukortit[tunniste].tee_lista(lista_alueista) #viedään lista olioon, ei saa viedä parametrina
  126.  
  127. except:
  128. print("Virhe: tiedostoa ei saa luettua.")
  129.  
  130. while True:
  131. rivi = input("komento> ")
  132.  
  133. if rivi == "":
  134. break
  135.  
  136. osat = rivi.split()
  137. käsky = osat[0]
  138.  
  139. if käsky == "lista" and len(osat) == 1: #kulkukorttien tiedot aakkosjärjestyksessä
  140. for rivi in sorted(kulkukortit): #tunniste : olio, rivi = tunniste
  141. kulkukortit[rivi].tulosta_tiedot()
  142.  
  143.  
  144. elif käsky == "tiedot" and len(osat) == 2:
  145. tunniste = osat[1]
  146. try:
  147. kulkukortit[tunniste].tulosta_tiedot()
  148. except:
  149. print("Virhe: tuntematon tunniste.")
  150.  
  151. elif käsky == "kulku" and len(osat) == 3: # kulku tunniste huone
  152. tunniste = osat[1]
  153. huone = osat[2]
  154.  
  155. if tunniste in kulkukortit:
  156.  
  157. onko_oikeus = kulkukortit[tunniste].tarkista_pääsy(huone)
  158. nimi = kulkukortit[tunniste].anna_nimi()
  159.  
  160. if onko_oikeus == True:
  161. print("Kortilla ", tunniste, " ( ", nimi, " ) on kulkuoikeus huoneeseen ", huone, sep="")
  162.  
  163. else:
  164. print("Kortilla ", tunniste, " ( ", nimi, " ) ei kulkuoikeutta huoneeseen ", huone, sep="")
  165.  
  166. else:
  167. print("Virhe: tuntematon tunniste.")
  168.  
  169.  
  170. elif käsky == "lisää" and len(osat) == 3:
  171. tunniste = osat[1]
  172. alue = osat[2]
  173.  
  174. if tunniste in kulkukortit:
  175. kulkukortit[tunniste].lisää_kulkualue(alue)
  176.  
  177. else:
  178. print("Virhe: tuntematon tunniste.")
  179.  
  180.  
  181. elif käsky == "yhdistä" and len(osat) == 3:
  182. henkilö = osat[1] # henkilö, jonka kortille halutaan yhdistää
  183. kortti = osat[2] # yhdistettävä kortti
  184.  
  185. if henkilö in kulkukortit and kortti in kulkukortit :
  186. kulkukortit[henkilö].yhdistä_kulkukortti(kulkukortit[kortti])
  187.  
  188. else:
  189. print("Virhe: tuntematon tunniste.")
  190.  
  191. else:
  192. print("Virhe: Väärä syöte, yritä uudelleen")
  193.  
  194.  
  195. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement