Wyjaśnienie działania kodu w Pythonie.

0

Dzień dobry, czy mógłby ktoś wyjaśnić działanie tego kodu. Reprezentuje on szyfr cezara.

Głównie interesuje mnie:

  1. Skąd program wie że chodzi o alfabet.
    2.Co znaczą "ord" oraz "chr"
    3.Ogólne działanie kodu.

Z góry dzięki.

KLUCZ = 3

def szyfruj(txt):
    zaszyfrowny = ""
    for i in range(len(txt)):
        if ord(txt[i]) > 122 - KLUCZ:
            zaszyfrowny += chr(ord(txt[i]) + KLUCZ - 26)
        else:
            zaszyfrowny += chr(ord(txt[i]) + KLUCZ)
    return zaszyfrowny

def main(args):
    tekst = input("Podaj ciąg do zaszyfrowania:\n")
    print("Ciąg zaszyfrowany:\n", szyfruj(tekst))
    return 0

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))
1
  1. Program nic nie "wie".
    patrz https://pl.wikipedia.org/wiki/ASCII

  2. ord i chr to bijekcje miedzy wizualnymi znakami ASCII a ich liczbowymi wartosciami w komputerze. (EDIT: tak na prawde to unicode a nie ASCII ale nie ma co zbytnio komplikowac bo unicode to rozszerzenie ASCII)

  3. No musisz jednak zadac bardziej precyzyjne pytanie bo ogolne dzialanie kodu jest zapisane w nim wlasnie i wystarczy przeczytac...

1

Nie mam pojęcia, o co pytasz, gdy pytasz o to, co „wie” Twój program — i raczej nie jestem tutaj jedyny…

A co do tego „reaserchu internetowego”, który Ci nie pomógł znaleźć wyjaśnienia działania funkcji w Pythonie: ord, chr

0

Może bardziej dokladnie. Jak działa ten fragment, ludzkimi słowami

for i in range(len(txt)):
        if ord(txt[i]) > 122 - KLUCZ:
            zaszyfrowny += chr(ord(txt[i]) + KLUCZ - 26)
        else:
            zaszyfrowny += chr(ord(txt[i]) + KLUCZ)
0

No wez slowo txt i podziel na pojedyncze literki.
Teraz kazda taka pojedyncza literke przesun, przetransformuj tak jak w szyfrze Cezara z odpowiednim KLUCZem.
Plus minus technikalia zwiazane z tablica ASCII wlasnie.

1

Numer oznacza tłumaczoną linijkę:

  1. Iterując w zakresie od zera do długości txt:
  2. Jeśli wartość unikodowa i-tego elementu txt jest większa od 122 - KLUCZ: (122 to w Unikodzie z, czyli ostatnia alfabetycznie litera)
  3. Do zaszyfrowany dopisz znak, którego wartość unikodowa (chr) odpowiada wartości oryginalnego znaku (ord(txt[i]) powiększonej o KLUCZ i pomniejszonej o 26). (26 to liczba liter od a do z)
  4. A jeśli nie:
  5. To podobnie jak w 3., ale bez cofania się o długość alfabetu.

Dlaczego tak? Bo autor chciał, żeby zawsze mała litera była przerzucana na małą literę, więc jakby miało mu to wyjść poza alfabet, to woli „pojechać od początku” — zatem z nie zostanie zakodowane jako } (znak, którego wartość unikodowa jest o trzy większa niż z), tylko jako c.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0