Autorské riešenie
Máme zadané heslo, pre ktoré chceme overiť jeho bezpečnosť. Heslo považujeme za bezpečné práve vtedy, keď obsahuje minimálne 11 znakov, z toho:
Funkcia by mala overiť, či heslo spĺňa všetky uvedené podmienky. Môžeme začať so zistením dĺžky reťazca funkciou len(). Ak má reťazec menej ako 11 znakov, vieme s určitosťou povedať, že heslo nie je bezpečné. Ak má reťazec aspoň 11 znakov, vytvoríme si 4 premenné typu boolean inicializované na hodnotu False. Premenné budú označovať (ne)prítomnosť malého a veľkého písmena, číslice a špeciálneho znaku v reťazci. V cykle prechádzame reťazcom znak po znaku a pomocou podmienok zisťujeme, do ktorej skupiny znakov aktuálny znak patrí. Funkciou islower() vieme zistiť či je znak malé písmeno, funkciou isupper() či je znak veľké písmeno a funkciou isdigit() či je znak číslicou. Akýkoľvek iný znak (napr. bodka, hviezdička, výkričník) môžeme považovať za špeciálny. Podľa toho ktorá z podmienok je pre aktuálny znak splnená meníme v príslušnej premennej hodnotu False na hodnotu True. Ak majú po skočení cyklu všetky 4 premenné hodnotu True, funkcia je_bezpecne tiež vráti True (= je bezpečné), inak False (= nie je bezpečné). #Pythondef je_bezpecne(heslo): if len(heslo) < 11: return False obsahuje_male = False obsahuje_velke = False obsahuje_cislicu = False obsahuje_specialny = False for i in heslo: if i.islower(): obsahuje_male = True elif i.isupper(): obsahuje_velke = True elif i.isdigit(): obsahuje_cislicu = True else: obsahuje_specialny = True return obsahuje_male and obsahuje_velke and obsahuje_cislicu and obsahuje_specialny Vaše zaujímavé riešenia a najčastejšie chyby Plný počet bodov za riešenie tejto úlohy získalo 6 tímov. Niektoré tímy použili namiesto funkcií na zistenie typu znaku porovnávanie znakov (napr. if heslo[i] >= 'a' and heslo[i] <= 'z'), čo bolo tiež správnym riešením. Najčastejšou chybou bolo zisťovanie špeciálnych znakov na základe porovnávania znaku s malou množinou konkrétnych znakov, ktorá niektoré špeciálne znaky neuvažovala (napr. hviezdičku, výkričník). |
||||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |