Autorské riešenie
V tejto úlohe je našim cieľom priebežne vypočítavať dve hodnoty: celkovú priemernú spotrebu auta a priemernú spotrebu od posledného tankovania. Pre celkovú spotrebu potrebujeme vedieť:
Pre priemernú spotrebu paliva medzi dvoma tankovaniami potrebujeme vedieť:
Z predchádzajúceho textu vieme, že niektoré hodnoty (celkové množstvo paliva, počet km od posledného tankovania) si musíme uchovávať počas celého výpočtu. Pre túto potrebu si môžeme vytvoriť dve globálne premenné. Na začiatku budú mať obidve hodnotu 0. ;Imagine logo #Python celkomL = 0 posledneTankovanieKM = 0 Pri každom tankovaní:
Výsledná verzia môže vyzerať nasledovne: ;Imagine logo #Python - - spotreba.py import gui_spotreba as gui celkomL = 0 posledneTankovanieKM = 0 def pocitajPriemer(): global celkomL global posledneTankovanieKM pocetKM = float(gui.km.get()) pocetL = float(gui.l.get()) aktualnaPriemernaSpotreba = 100 * pocetL / (pocetKM - posledneTankovanieKM) celkomL = celkomL + pocetL posledneTankovanieKM = pocetKM celkovaPriemernaSpotreba = 100 * celkomL / posledneTankovanieKM gui.priemer.set(str(aktualnaPriemernaSpotreba)) gui.priemerCelkom.set(str(celkovaPriemernaSpotreba)) Všimnime si dva zaujímavé rozdiely. V Imagine logu sú globálne premenné ("celkomL, "posledneTankovanieKM) priamo prístupné aj v procedúre. V jazyku Python ich musíme vo funkcii sprístupniť pomocou kľúčového slova global. Imagine logo do projektu uloží aj hodnoty globálnych premenných. Preto musíme pri spustení nastaviť počiatočné hodnoty na 0. Využijeme na to procedúru noveAuto, ktorú spustíme keď začíname počítať spotrebu pre nové auto. Python hodnoty premenných do skriptov neukladá. Tu len nastavíme počiatočné hodnoty na 0. Vždy po spustení začíname teda automaticky počítať údaje pre nové auto. Vaše zaujímavé riešenia a najčastejšie chyby Najviac problémov ste mali s výpočtom celkového priemeru a s pamätaním si celkového počtu km a litrov. Niektorí z vás brali hodnotu na počítadle km ako počet km od posledného tankovania. To ale nie je problém, ak sa ostatné hodnoty počítajú správne. Bonus pre fajnšmekrov Pozrime sa bližšie na riešenie v jazyku Python. Aplikácia pracuje správne. Porušili sme však niekoľko pravidiel a výsledok nie je veľmi "pekný".
Upravme preto celý návrh aplikácie tak, aby sme sa porušeniu týchto pravidiel vyhli. Dajme všetko pod jednu strechu - vytvorme si triedu. (pre zjednodušenie uvádzame len časť skriptu, celý skript priemernaspotreba.py): #Python - priemernaspotreba.py import tkinter class PriemernaSpotreba(tkinter.Tk): """ Graficka aplikacia pre vypocet priemernej spotreby auta """ def __init__(self, *args, **kwargs): """ Vytvori graficke rozhranie aplikacie """ ... tkinter.Button(self, text ="Vypočítaj priemernú spotrebu",\ command = self.pocitajPriemer).grid(row = 2, column = 0, columnspan = 2) ... self.mainloop() def priemernaSpotreba(self, l, km): """ Vypocita priemernu spotrebu v l/100 km ... """ return 100 * l / km def pocitajPriemer(self): """ Precita vstupne hodnoty z fomulara a zapise vysledne hodnoty o priemernej spotrebe do formulara """ pocetKM = float(self.km.get()) pocetL = float(self.l.get()) aktualnaPriemernaSpotreba = self.priemernaSpotreba\ (pocetL, pocetKM - self.posledneTankovanieKM) self.celkomL = self.celkomL + pocetL self.posledneTankovanieKM = pocetKM celkovaPriemernaSpotreba = self.priemernaSpotreba\ (self.celkomL, self.posledneTankovanieKM) self.priemer.set(str(aktualnaPriemernaSpotreba)) self.priemerCelkom.set(str(celkovaPriemernaSpotreba)) Spustenie aplikácie vyriešime v ďalšom skripte, ktorý vďaka zapúzdreniu celej funkcionality do jednej triedy bude veľmi jednoduchý (spotrebaAplikacia.py). #Python import priemernaspotreba as ps aplikacia = ps.PriemernaSpotreba() |
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |