Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.14 KB | None | 0 0
  1.  
  2.  
  3. from KatalogSamochodow import Katalog
  4. import subprocess
  5. import sys
  6.  
  7.  
  8. def install(package):
  9. subprocess.call([sys.executable, "-m", "pip",
  10. "install", "--user", package])
  11.  
  12. '''
  13. Jeżeli __main__ posiada prefix "__main__"
  14. zainstaluj wszystkie zależności.
  15.  
  16. '''
  17. if __name__ == "__main__":
  18. print("Fullfilling dependencies")
  19. install('termcolor')
  20. print("finished.")
  21.  
  22. '''
  23. Zmienna globalna.
  24. '''
  25. Lista = Katalog()
  26. # Conditional Lambda
  27.  
  28. '''
  29. Parametryzowalne funkcje lambda.
  30. '''
  31. def YearNotLowerThan(x):
  32. return lambda value: value.rocznik > x
  33.  
  34.  
  35. def VolumeNotLowerThan(x):
  36. return lambda value: value.pojemnosc > x
  37.  
  38.  
  39. def MileageNotLowerThan(x):
  40. return lambda value: value.przebieg > x
  41.  
  42.  
  43. def YearLowerThan(x):
  44. return lambda value: value.rocznik < x
  45.  
  46.  
  47. def VolumeLowerThan(x):
  48. return lambda value: value.pojemnosc < x
  49.  
  50.  
  51. def MileageLowerThan(x):
  52. return lambda value: value.przebieg < x
  53.  
  54.  
  55. '''
  56. Warnki wyświelania samochodów w liście obiektów typu tuple.
  57. '''
  58. Conditions = [
  59. (1, "Przebieg nie mniejszy niż X", MileageNotLowerThan),
  60. (2, "Pojemność nie mniejsza niż X", VolumeNotLowerThan),
  61. (3, "Rok nie mniejszy niż X", YearNotLowerThan),
  62. (4, "Przebieg mniejszy niż X", MileageLowerThan),
  63. (5, "Pojemność mniejsza niż X", VolumeLowerThan),
  64. (6, "Rok mniejszy niż X", YearNotLowerThan),
  65. ]
  66.  
  67. '''
  68. Lista sposobów sorowania.
  69. '''
  70. Sort = [
  71. (1, "Rok Produkcji(malejąco)", ("rocznik", True)),
  72. (2, "Rok Produkcji(rosnąco)", ("rocznik", False)),
  73. (3, "Pojemność silnika(malejąco)", ("pojemnosc", True)),
  74. (4, "Pojemność silnika(rosnąco)", ("pojemnosc", False)),
  75. (5, "Przebieg(malejąco)", ("przebieg", True)),
  76. (6, "Przebieg(rosnąco)", ("przebieg", False)),
  77.  
  78. ]
  79. # functions
  80.  
  81. def LoadFromFile():
  82. FileLocation = \
  83. input("Proszę podać lokalizacjię pliku (adres względny):")
  84. Lista.LoadFromFile(FileLocation)
  85.  
  86.  
  87. def SaveToFile():
  88. FileLocation =\
  89. input("Proszę podać miejsce zapisu pliku(adres względny):")
  90. Lista.SaveToFile(FileLocation)
  91.  
  92. '''
  93. 1.Wyświetl wszystkie elemeny listy Conditions.
  94. 2.Pobierz opcję wybraną przez użytkownika.
  95. 3.Znajdź wartość w liście (pierwszy element typu tuple)
  96. 4.Ustaw wartość w celu stworzenia parameryzowalnej lambdy.
  97. 5.Użyj parametryzowalnej lambdy jako argumentu do funkcji.
  98.  
  99. '''
  100. def ConditionalList():
  101. for Index, Message in [(x[0], x[1]) for x in Conditions]:
  102. print(str(Index) + ". " + Message)
  103. Decision = int(input("Opcja: "))
  104. for condition in Conditions:
  105. if Decision == condition[0]:
  106. Decision = int(input("Wartość: "))
  107. Lista.ConditionalList(condition[2](Decision))
  108.  
  109. '''
  110. 1.Wyświetl wszystkie elemeny listy Conditions.
  111. 2.Pobierz opcję wybraną przez użytkownika.
  112. 3.Znajdź wartość w liście (pierwszy element typu tuple)
  113. 4.Użyj parametryzowalnej lambdy jako argumentu do funkcji.
  114.  
  115. '''
  116. def SortedList():
  117. for Index, Message in [(x[0], x[1]) for x in Sort]:
  118. print(str(Index) + ". " + Message)
  119. Decision = int(input("Opcja: "))
  120. for condition in Sort:
  121. if Decision == condition[0]:
  122. Lista.SortCars(condition[2])
  123.  
  124. '''
  125. Dodaj samochód
  126. '''
  127. def AddCar():
  128. model = input("Proszę podać model samochodu: ")
  129. marka = input("Proszę podać markę samochodu: ")
  130. rocznik = int(input("Proszę podać rok produkcji samochodu: "))
  131. pojemnosc = float(input("Proszę podać pojemność silnika samochodu(w litrach): "))
  132. przebieg = int(input("Proszę podać przebieg samochodu: "))
  133. typskrzyni = int(
  134. input("Proszę podać rodzaj skrzyni biegów(1 - auto, 0 - man):"))
  135. Lista.AddCar(model, marka, rocznik, pojemnosc, przebieg, typskrzyni)
  136.  
  137. '''
  138. Usuń samochód
  139. '''
  140. def RemoveCar():
  141. Index = int(input("Proszę podać numer index samochodu: "))
  142. Lista.RemoveCar(Index)
  143. def ShowCar():
  144. index = int(input("Proszę podać indeks samochodu: "))
  145. Lista.ShowSingleCar(index)
  146.  
  147. '''
  148. Lista dostępnych opcji w menu.
  149. Każda opcja jest typu tuple
  150. '''
  151. MenuList = [
  152. (1, "Wczytaj listę samochodów z pliku", LoadFromFile),
  153. (2, "Zapisz listę samochodów do pliku", SaveToFile),
  154. (3, "Wyświetl listę", Lista.showCars),
  155. (4, "Wyświetl listę na podstawie warunku", ConditionalList),
  156. (5, "Wyświetl listę posortowaną wg. warunku", SortedList),
  157. (6,"Wyświetl samochód o indeksie", ShowCar),
  158. (7, "Dodaj Samochód", AddCar),
  159. (8, "Usuń samochód", RemoveCar),
  160. (0, "Koniec Programu", exit)
  161. ]
  162.  
  163. '''
  164. Główna pętla programu.
  165. '''
  166. def main():
  167. while True:
  168. for Index, Message in [(x[0], x[1]) for x in MenuList]:
  169. print(str(Index)+". " + Message)
  170. Decision = int(input("Opcja: "))
  171. for condition in MenuList:
  172. if Decision == condition[0]:
  173. condition[2]()
  174. print("")
  175.  
  176. '''
  177. jeżeli __name__ = "__main__"
  178. wejdź do głownej pętli.
  179. '''
  180. if __name__ == "__main__":
  181.  
  182. main()
  183.  
  184.  
  185. 2ga klasa
  186.  
  187. from Car import Car
  188. import copy
  189. from operator import itemgetter, attrgetter, methodcaller
  190. import termcolor
  191.  
  192.  
  193. class Katalog:
  194. '''
  195. Konstruktor klasy Katalog.
  196. musi ona posiadać tylko i wyłącznie pustą listę.
  197. '''
  198. def __init__(self):
  199. self.Cars = []
  200. pass
  201. '''
  202. Wczytywanie samochodów z pliku oraz dodawanie ich do listy.
  203. '''
  204.  
  205. def LoadFromFile(self, Location: str):
  206. List = open(Location)
  207. for Object in List.readlines():
  208. Object = Object.replace("\n", "")
  209. Obj = Object.split('|')
  210. self.Cars.append(
  211. Car.Car(Obj[0],
  212. Obj[1], int(Obj[2]),
  213. float(Obj[3]), int(Obj[4]),
  214. int(Obj[5])))
  215. List.close()
  216. '''
  217. Zapisz Samochody do listy.
  218. '''
  219. def SaveToFile(self, File: str):
  220. List = open(File, "w")
  221. for Car in self.Cars:
  222. List.write(Car.__serialize__() + "\n")
  223. List.close()
  224. '''
  225. Wyświetlanie samochodów w liście.
  226. '''
  227. def showCars(self):
  228. print(termcolor.colored("Lista samochodów", 'red'))
  229. for A in range(0, self.Cars.__len__()):
  230. print("Index samochodu:" + str(A))
  231. print(self.Cars[A])
  232. print(termcolor.colored("Koniec listy samochodów", 'red'))
  233. '''
  234. Ujednolicona Lista warunkowa.
  235. Condition jest funkcją typu lambda która jest wykonywana
  236. dla każdego elementu w liście.
  237. '''
  238. def ConditionalList(self, condition):
  239. print(termcolor.colored("Lista samochodów", 'red'))
  240. for A in range(0, self.Cars.__len__()):
  241. if condition(self.Cars[A]):
  242. print("Index samochodu:" + str(A))
  243. print(self.Cars[A])
  244. print(termcolor.colored("Koniec listy samochodów", 'red'))
  245. '''
  246. Wyświetlenie samochodu na podstawie indeksu.
  247. '''
  248. def ShowSingleCar(self, index: int):
  249. if index > self.Cars.__len__() and index < 0:
  250. print(termcolor.colored("Samochod o takim indexie nie istnieje", 'red'))
  251. else:
  252. print("Samochód o numerze indeksu: " + str(index))
  253. print(self.Cars[index])
  254. pass
  255. '''
  256. Sortowanie samochodów na podstawie parametru.
  257. parametr jest funkcją lambda.
  258. '''
  259. def SortCars(self, parameter):
  260. SortedList = copy.deepcopy(self.Cars)
  261. SortedList.sort(key=attrgetter(parameter[0]), reverse=parameter[1])
  262. print(termcolor.colored("Posortowana lista", 'red'))
  263. for A in range(0, self.Cars.__len__()):
  264. print(SortedList[A])
  265. print(termcolor.colored("Koniec listy samochodów", 'red'))
  266. '''
  267. dodanie samochodu do listy.
  268. '''
  269. def AddCar(self, marka: str, model: str,
  270. rocznik: int, pojemnosc: float, przebieg: int, TypSkrzyni: bool):
  271. self.Cars.append(
  272. Car.Car(
  273. marka, model,
  274. rocznik, pojemnosc,
  275. przebieg, TypSkrzyni)
  276. )
  277. pass
  278. '''usunięcie samochodu o określonym indeksie.'''
  279. def RemoveCar(self, index):
  280. if index > self.Cars.__len__() and index < 0:
  281. print(termcolor.colored("Samochod o takim indexie nie istnieje", 'red'))
  282. else:
  283. del self.Cars[index]
  284.  
  285.  
  286.  
  287. 3 klasa
  288.  
  289. class Car:
  290. '''
  291. Konstrukor klasy Car.
  292. Przypisuje wartości podstawowych pól klasy.
  293. '''
  294. def __init__(self, marka: str, model: str,
  295. rocznik: int, pojemnosc: float, przebieg: int, TypSkrzyni: int):
  296. self.marka = marka
  297. self.model = model
  298. self.rocznik = rocznik
  299. self.pojemnosc = pojemnosc
  300. self.przebieg = przebieg
  301. self.TypSkrzyni = TypSkrzyni
  302. '''
  303. Pomocna funkcja która zwraca wartość typu string
  304. o aktualnym typie skrzyni samochodu.
  305. '''
  306. def typSkrzyni(self):
  307. if self.TypSkrzyni == 1:
  308. return "Automatyczna"
  309. else:
  310. return "Manualna"
  311. '''
  312. Przeciążona metoda specialna dostępna wyłącznie w języku python.
  313. funkcja print() zawsze wywołuje tą metodę aby uzyskać informacje o
  314. obiekcie.
  315. W tym przypadku zwracamy w czytelny sposób informacje.
  316. '''
  317. def __str__(self):
  318. Sttr = ""
  319. Sttr += "Marka: " + self.marka + "\n"
  320. Sttr += "Model: " + self.model + "\n"
  321. Sttr += "Rocznik: " + str(self.rocznik) + "\n"
  322. Sttr += "Pojemność: " + str(self.pojemnosc) + "\n"
  323. Sttr += "Przebieg: " + str(self.przebieg) + "\n"
  324. Sttr += "Typ Skrzyni: " + self.typSkrzyni()+"\n"
  325. Sttr += "\n"
  326. return Sttr
  327. '''
  328. Serializowanie obiektu.
  329. '''
  330. def __serialize__(self):
  331. Sttr = ""
  332. Sttr += self.marka \
  333. + "|" + self.model \
  334. + "|" + str(self.rocznik) \
  335. + "|" + str(self.pojemnosc) \
  336. + "|" + str(self.przebieg) \
  337. + "|" + str(self.TypSkrzyni)
  338. return Sttr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement