Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Kulkukortti:
- def __init__(self, tunniste, nimi):
- """ Luokan rakentaja
- :param tunniste: henkilön tunniste (str)
- :param nimi: henkilön nimi (str)
- """
- self.__tunniste = tunniste
- self.__nimi = nimi
- self.__kulkulista = []
- def tee_lista(self, lista_alueista):
- self.__kulkulista = lista_alueista
- def tulosta_tiedot(self):
- kulkualueet = ""
- for kulkualue in sorted(self.__kulkulista):
- kulkualueet += kulkualue + ","
- kaikki_alueet = kulkualueet.rstrip(",")
- print(self.__tunniste, ", ", self.__nimi,", kulkualueet: ", kaikki_alueet, sep="")
- def anna_nimi(self):
- """ Palauttaa kulkukortille talletetun henkilön nimen."""
- return self.__nimi
- def tarkista_pääsy(self, ovi):
- for n in range(len(ovi)+1):
- if ovi[:n+1] in self.__kulkulista:
- return True
- return False
- def lisää_kulkualue(self, uusi_alue):
- uudet_oikeudet = []
- poistettavat_oikeudet = []
- for oikeus in self.__kulkulista:
- if uusi_alue[0] != oikeus[0]:
- if uusi_alue not in uudet_oikeudet:
- uudet_oikeudet.append(uusi_alue)
- elif uusi_alue[0] == oikeus[0]:
- if len(uusi_alue) > len(oikeus) and oikeus in uusi_alue:
- pass
- elif uusi_alue in oikeus:
- poistettavat_oikeudet.append(oikeus)
- if uusi_alue not in uudet_oikeudet:
- uudet_oikeudet.append(uusi_alue)
- elif uusi_alue not in oikeus:
- if uusi_alue not in uudet_oikeudet:
- uudet_oikeudet.append(uusi_alue)
- for arvo in self.__kulkulista:
- if arvo not in poistettavat_oikeudet:
- uudet_oikeudet.append(arvo)
- self.__kulkulista = uudet_oikeudet
- def yhdistä_kulkukortti(self, toinen_kortti):
- virhe = 0
- for oikeus in toinen_kortti:
- if len(oikeus) == 1:
- uudet_oikeudet = []
- for kulkuoikeus in self.__kulkulista:
- if kulkuoikeus[0] == oikeus:
- pass
- else:
- uudet_oikeudet.append(kulkuoikeus)
- uudet_oikeudet.append(oikeus)
- self.__kulkulista = uudet_oikeudet
- elif len(oikeus) == 2:
- for kulkuoikeus in self.__kulkuoikeudet:
- if kulkuoikeus == oikeus[0] or kulkuoikeus == oikeus:
- virhe = 1
- break
- elif oikeus in kulkuoikeus:
- self.__kulkuoikeudet.remove(kulkuoikeus)
- if virhe != 1:
- self.__kulkuoikeudet.append(oikeus)
- elif len(oikeus) >= 3:
- for kulkuoikeus in self.__kulkuoikeudet:
- if kulkuoikeus in oikeus:
- virhe = 1
- break
- if oikeus in kulkuoikeus:
- self.__kulkuoikeudet.remove(kulkuoikeus)
- if virhe != 1:
- self.__kulkuoikeudet.append(oikeus)
- def main():
- tiedosto = open("kulkutiedot.txt", "r", encoding="UTF-8")
- kulkukortit = {}
- try:
- for rivi in tiedosto:
- rivi = rivi.rstrip()
- kentät = rivi.split(';')
- tunniste = kentät[0]
- nimi = kentät[1]
- kulkukortti = Kulkukortti(tunniste, nimi)
- alueet = kentät[2]
- lista_alueista = alueet.split(",")
- kulkukortit[tunniste] = kulkukortti #??? dicti jonka sisällä on olio kulkukortit[tunniste] on olion nimi
- kulkukortit[tunniste].tee_lista(lista_alueista) #viedään lista olioon, ei saa viedä parametrina
- except:
- print("Virhe: tiedostoa ei saa luettua.")
- while True:
- rivi = input("komento> ")
- if rivi == "":
- break
- osat = rivi.split()
- käsky = osat[0]
- if käsky == "lista" and len(osat) == 1: #kulkukorttien tiedot aakkosjärjestyksessä
- for rivi in sorted(kulkukortit): #tunniste : olio, rivi = tunniste
- kulkukortit[rivi].tulosta_tiedot()
- elif käsky == "tiedot" and len(osat) == 2:
- tunniste = osat[1]
- try:
- kulkukortit[tunniste].tulosta_tiedot()
- except:
- print("Virhe: tuntematon tunniste.")
- elif käsky == "kulku" and len(osat) == 3: # kulku tunniste huone
- tunniste = osat[1]
- huone = osat[2]
- if tunniste in kulkukortit:
- onko_oikeus = kulkukortit[tunniste].tarkista_pääsy(huone)
- nimi = kulkukortit[tunniste].anna_nimi()
- if onko_oikeus == True:
- print("Kortilla ", tunniste, " ( ", nimi, " ) on kulkuoikeus huoneeseen ", huone, sep="")
- else:
- print("Kortilla ", tunniste, " ( ", nimi, " ) ei kulkuoikeutta huoneeseen ", huone, sep="")
- else:
- print("Virhe: tuntematon tunniste.")
- elif käsky == "lisää" and len(osat) == 3:
- tunniste = osat[1]
- alue = osat[2]
- if tunniste in kulkukortit:
- kulkukortit[tunniste].lisää_kulkualue(alue)
- else:
- print("Virhe: tuntematon tunniste.")
- elif käsky == "yhdistä" and len(osat) == 3:
- henkilö = osat[1] # henkilö, jonka kortille halutaan yhdistää
- kortti = osat[2] # yhdistettävä kortti
- if henkilö in kulkukortit and kortti in kulkukortit :
- kulkukortit[henkilö].yhdistä_kulkukortti(kulkukortit[kortti])
- else:
- print("Virhe: tuntematon tunniste.")
- else:
- print("Virhe: Väärä syöte, yritä uudelleen")
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement