Autorské riešenie
Úloha je zameraná na spracovanie textu a výpočet, použije sa generovanie náhodných čísel/znakov. Riešenie úlohy treba rozdeliť do viacerých krokov: načítať vstupnú vetu, rozdeliť vstupnú vetu na slová, spočítať slová, skontrolovať počet slov vo vete, vypočítať číslicu z počtu slov ako prvý znak hesla, postupne vybrať z každého slova prvé písmeno a pridať ho do hesla, náhodne generovať posledný znak a vložiť ho do hesla, vrátiť (vypísať) heslo. Vstupná veta nech je načítaná do zoznamu (poľa), aby sa slová vo vete dali ľahko spočítať ako prvky zoznamu a pracovať so slovami ako s textovými prvkami zoznamu. V Imagine treba zadať vstup ako zoznam slov, alebo ako textový reťazec a rozlišovať slová pomocou medzery, alebo načítať vetu samostatne z klávesnice. Riešenia v Imagine preto môžu byť odlišné. Používateľ by mal byť informovaný, aký spôsob načítania vety je použitý (aspoň v komentári). Slovo môže byť textová premenná, alebo zoznam, v ktorom sú písmená ako prvky zoznamu. Znak náhodne generovaný má byť z menšej množiny (nie malé písmeno, nie veľké písmeno, nie číslica). To sa dá riešiť viacerými spôsobmi. Pozrime sa na ASCII tabuľku znakov, určime rozsah vhodných znakov, pozrime sa na ich desiatkový číselný kód (napr. 33 až 48), generujme číslo z tohto rozsahu a zmeňme ho na znak. Druhý spôsob: vytvorme si zoznam vhodných znakov a náhodne vyberajme prvok z tohto zoznamu (generujme náhodnú pozíciu prvku v zozname). Nezabudnime na komentár v zdrojovom kóde pre vysvetlenie pomenovania premenných a postupu výpočtu. ;Imagine logo
viem heslo :veta urobTu "heslo prvok 1 :veta urobTu "pocetSlov 1 opakuj pocet :veta [ ak prvok pocitadlo :veta = "| | [ urobTu "heslo slovo :heslo prvok (pocitadlo + 1) :veta zvys "pocetSlov ] ] ak2 alebo (:pocetSlov < 5) (:pocetSlov > 18) [ pis "|Vstup ma mat od 5 do 18 slov| ] [ urobTu "heslo slovo (cPodiel :pocetSlov 2) :heslo urobTu "heslo slovo :heslo (prvok 1 pomiesaj [! @ $ % ^ & * , . ; - _ ]) pis :heslo ] koniec
# Python import random def heslo(veta): ''' Funkcia vrati heslo vygenerovane zo vstupu. :param veta: vstupna veta :type veta: string :return: heslo :rtype: string ''' heslo = "" veta = veta.split() # rozdeli vetu do zoznamu po slovach if len(veta) < 5 or len(veta) > 18: # kontrola vstupu print("Vstup ma mat od 5 do 18 slov") else: heslo = str(len(veta) // 2) # cislica for slovo in veta: # znaky ako prve pismena zo slov prvyZnak = slovo[0] heslo = heslo + prvyZnak # heslo = heslo + chr(random.randrange(33, 48)) # nahodny znak na koniec # alebo heslo = heslo + random.choice(["!", "@", "$", "%", "^", "&", "*", ",", ".", ";", "-", "_",]) print(heslo) heslo ("moja m a j l") Vaše zaujímavé riešenia a najčastejšie chyby Zaujímavé riešenie bolo s využitím zoznamu pre vstupnú vetu, kde v cykle s podmienkou sa postupne spracovali slová a zmenšoval sa zoznam, až ostal prázdny. |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |