Lekcja 7 - Nikola Horn
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