Autorské riešenie
Riešenie tejto úlohy spočíva v správnom prechádzaní textového reťazca (správnom prečítaní znakových a číselných znakov). Správne prečítanie znakových reťazcov v tvare 'zs' alebo 'ss', je potrebné na to, aby sme vedeli, ktorej škole pripočítavame hodnotu. Správne prečítanie číselných reťazcov zabezpečí, aby bola škole priradená správna hodnota. Taktiež musíme prečítané hodnoty vedieť ukladať do premennej a spočítavať. Po prejdení celého reťazca, spočítaní a pridelení všetkých hodnôt, je potrebné ich vrátiť ako výstupnú hodnotu funkcie.
Vytvorenie funkcie a premenných def vyhodnot(zaznam): zs_kg = 0 ss_kg = 0 idx = 0
Čítanie reťazca - textové znaky while idx < len(zaznam): if zaznam[idx] == 'z': typ = 'zs' elif zaznam[idx] == 's': typ = 'ss' idx = idx + 2
Čítanie reťazca - číselné znaky cislice = '' while idx < len(zaznam) and zaznam[idx].isdigit(): cislice = cislice + zaznam[idx] idx = idx + 1 cislo = int(cislice)
Priradenie hodnôt a vrátenie výsledku if typ == 'zs': zs_kg += cislo else: ss_kg += cislo return zs_kg, ss_kg Výsledná funkcia môže vyzerať nasledovne: def vyhodnot(zaznam): zs_kg = 0 ss_kg = 0 idx = 0 while idx < len(zaznam): # identifikujeme typ skoly if zaznam[idx] == 'z': typ = 'zs' elif zaznam[idx] == 's': typ = 'ss' idx = idx + 2 # precitame cislo za typom skoly cislice = '' while idx < len(zaznam) and zaznam[idx].isdigit(): cislice = cislice + zaznam[idx] idx = idx + 1 cislo = int(cislice) # podla typu skoly pripocitame cislo if typ == 'zs': zs_kg += cislo else: ss_kg += cislo return zs_kg, ss_kg
Alternatívne riešenie import re def vyhodnot(zaznam): zs_cisla_str = re.findall(r'zs([0-9]*)', zaznam) zs_kg = sum(int(cislo) for cislo in zs_cisla_str) ss_cisla_str = re.findall(r'ss([0-9]*)', zaznam) ss_kg = sum(int(cislo) for cislo in ss_cisla_str) return zs_kg, ss_kg Všimnime si, že prvý regulárny výraz hľadá všetky podreťazce, ktoré majú tvar: 'zs([0-9]*)'. Začínajú reťazcom 'zs', za ktorým nasleduje ľubovoľný počet číslic [0-9]*. Z týchto podreťazcov extrahuje len samotné číslice. Výsledkom je zoznam číselných reťazcov, ktoré stačí pretypovať na int a vzájomne sčítať. Analogicky postupujeme aj pri záznamoch pre stredné školy. Vaše zaujímavé riešenia a najčastejšie chyby Väčšina riešiteľov postupovala podobne ako v autorskom riešení. Najčastejšími chybami bolo nezapočítanie poslednej hodnoty v reťazci alebo počítanie hodnôt spolu a nie oddelene pre základnú a strednú školu. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |