Lekcja 7 - Nikola Horn

Lekcja 7 - Nikola Horn
Photo by Hendrik Morkel / Unsplash

Książka telefoniczna (zadanie dom.)

ksiazka_tele = {"Olga Tokarczuk" : "7867675", "Wacław Kromer" : "5645646"}


while True:
    # Zapytanie o wybranie operacji
    operacja = input(
        "Wybierz operację do wykonania:\n\
                  1 - dopisanie pozycji do książki\n\
                  2 - aktualizacja pozycji książki\n\
                  3 - usunięcie pozycji książki\n\
                  4 - wydruk imion z książki\n\
                  5 - wydruk całej książki telefonicznej\n\
                  6 - koniec programu\nPodaj kod operacji = "
    )

    if not operacja:
        break

    # Wykonanie wybranej operacji
    if operacja == "1":
        print("Wybrano 1")
        imie = input("Wpisz imię i nazwisko: ")

        #Sprawdzenie czy imię już istnieje
        if imie in ksiazka_tele:
            print("Taki wpis już istnieje.")
        else:
            telefon = input("Wpisz numer telefonu: ")
            ksiazka_tele[imie]=telefon

    elif operacja == "2":
        print("Wybrano 2")
        aktualizuj = input("Jaki wpis chcesz zaktualizować? Podaj imię i nazwisko: ")
        
        #Sprawdzenie czy istnieje taki wpis
        if aktualizuj not in ksiazka_tele:
            print("Taki wpis nie istnieje.")
        else:
            ksiazka_tele.pop(aktualizuj)
            ksiazka_tele[(input("Wpisz aktualne imię i nazwisko: "))]=(input("Wpisz aktualny numer telefonu: "))

    elif operacja == "3":
        print("Wybrano 3")
        usun = (input("Jaki wpis chcesz usunąć? Podaj imię i nazwisko: "))
        ksiazka_tele.pop(usun)

    elif operacja == "4":
        print("Wybrano 4")
        
        #Drukowanie samych kluczy (ładnie)
        for klucz in ksiazka_tele.keys():
            print(klucz)

    elif operacja == "5":
        print("Wybrano 5")
        
        #Drukowanie par klucz-wartość (ładnie)
        for klucz, wartosc in ksiazka_tele.items():
            print(klucz, wartosc)
    

    elif operacja == "6":
        break

    else:
        print("\nPodano błędny kod operacji")


# Koniec programu
print("\nKoniec programu")

Szyfr Cezara

ZNAKI = [
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
"Ą",
"ą",
"Ć",
"ć",
"Ę",
"ę",
"Ł",
"ł",
"Ń",
"ń",
"Ó",
"ó",
"Ś",
"ś",
"Ź",
"ź",
"Ż",
"ż",
" ",
".",
"?",
"!",
]

tekst = input("Wpisz tekst do zaszyfrowania: ")
klucz = int(input("Podaj klucz (liczbę): "))

zaszyfrowanytekst = ""

for i in tekst:
    obecny_indeks = ZNAKI.index(i)
    
    #dzięki temu wraca do początku
    indekszaszyfrowany = (obecny_indeks + klucz) % len(ZNAKI)
    
    zaszyfrowanytekst += ZNAKI[indekszaszyfrowany]
    
print(zaszyfrowanytekst)

Notatki z zajęć

For vs while

For

  • "wykonuj coś tyle razy ile jest elementów w..."
  • preferowana pętla w Pythonie
  • wymaga iterowalnego elementu

While

  • "wykonuj tak długo aż..."
  • wykorzystywana m.in. do tworzenia pętli nieskończonych
  • wymaga warunku

Szyfrowanie

dane źródłowe -> szyfrowanie -> deszyfrowanie

"kot i pat" -> "fjfjfhdjfhjghfk" -> "kot i pat"

proces szyfrowania da się odwrócić

Klucze symetryczne

wszyscy użytkownicy mają ten sam klucz do szyfru

Klucze asymetryczne

Symetryczne + asymetryczne

Można użyć klucza asymetrycznego do przekazania klucza symetrycznego (bezpieczne przekazanie klucza symetrycznego). Zapewnia to szybsze działanie, bo później używamy już tylko klucza symetrycznego.

Hash - funkcja skrótu

Funkcja skrótu zmienia nam dane w "bełkot", ale proces ten jest nieodwracalny.

Możemy jednak stwierdzić czy dany hash powstał na podstawie konkretnych danych wejściowych. W najprostszej postaci - te same dane zawsze zwracają ten sam hash. Np. wpisujemy hasło -> jest zamieniane na hash -> hash jest porównywany do tego zapisanego w serwisie (dzięki temu w serwisie nie muszą być zapisane hasła).

hash()

Szyfr Cezara

Najprostszy algorytm szyfrujący.

Użytkownik podaje liczbę (szyfr) i każdy ze znaków zostanie podmieniony o ten znak+liczba, więc:

klucz 1

ADA -> BEB

klucz 2

ADA -> CFC