Najdi kodo

Najdi kodo

Avtor: Sanja Milasinovic

Najdi kodo

Sanja Milasinovic

Besedilo naloge

Razbijanje kode Pri uporabi bančne kartice moramo dokazati, da poznamo kodo pin (osebno str. 18 identifikacijsko številko). Podobno v deželi PinLand uporabljajo štirimestne črkovne kode pin tudi za dostop do pomembnih podatkov na mreži. Pri razbijanju kode pin si pomagajmo s poskušanjem: vemo, kakšne so dovoljene kode, in preizkusimo vse možnosti. Za testiranje imamo na voljo funkcijo function Test(Geslo: string): boolean; external; oziroma extern bool Test(const char* Geslo). Ta funkcija vrne true, če je koda pravilna. Za kodo pin veljata naslednji omejitvi: • dolga je točno štiri znake; • dovoljeni so le znaki A, . . . , Z, torej ravno vse velike črke angleške abecede. Napiši program, ki bo s poskušanjem odkril pravo kodo pin in jo izpisal.

Postopek reševanja v Python-u


class najdiKodo:
    def koda(self):
        for prvaCrka in range(ord('A'),ord('Z')+1):
            for drugaCrka in range(ord('A'),ord('Z')+1):
                for tretjaCrka in range(ord('A'),ord('Z')+1):
                    for cetrtaCrka in range(ord('A'),ord('Z')+1):
                        #imamo 4 for zanke, s katerimi naredimo obhod skozi vse možnosti
                        #nato skupaj sestavimo besedo in jo testiramo
                        beseda=chr(prvaCrka)+chr(drugaCrka)+chr(tretjaCrka)+chr(cetrtaCrka)
                        if Test(beseda):
                            return beseda



Testni program


koda='SANX'
def Test(k):
    if k==koda:
        return True
    else:
        return False

Razlaga programa

Najprej sestavimo program(class najdiKodo), ki bo preveril vsako črko posebej. To naredimo z zanko for. V našem primeru imamo 4 for zanke zato, ker moramo preveriti vse štiri črke ali ustrezajo pogoju. Pomagamo si z računalniško abecedo, in sicer Ascii. Tako, da vzamemo ord('A'), ord('Z')pa +1, da nam šteje še tisti ta zadnji člen(A v Ascii je v bistvu šifriran pod število 65, Z pa pod 90). Nato vse te štiri črke sestavimo v besedo:. chr(prvaCrka)+chr(drugaCrka)+chr(tretjaCrka)+chr(cetrtaCrka) Ukaz chr glede na niz dolžine enega vrne celo število, ki predstavlja točko kode.

Nato sestavimo funkcijo Test, ki bo preverila ali je uporabnik prav vpisal kodo ali ne. Če je tista koda enaka naši izbrani kodi, naj nam funkcija izpiše True(se pravi je pravilno vpisana koda). Če ne pa naj nam izpiše False(koda ni pravilna).

Ta testni program smo si izbrali zato, ker na koncu nas zanima samo ali je uporabnik prav vtipkal geslo ali ne. To pa nam pove program s True ali pa False.

Na koncu še poženemo program:
>>> k='SANJA'
>>> Test(k)
False
>>> k='SANX'
>>> Test(k)
True

0%
0%