Python #7
Powtórzenie pętli

import turtle
import random
zolwik = turtle.Turtle() # stworz obiekt rysujacego zolwia pod zmienna zolwik
zolwik.speed(2) # ustaw szybkosc zolwia wbudowana metoda speed
zolwik.shape("turtle") # uzyj metody shape do ustawienia wygladu kursora / zolwia
zolwik.pensize(3)
kolory = [
"CornflowerBlue",
"DarkOrchid",
"IndianRed",
"DeepSkyBlue",
"LightSeaGreen",
"wheat",
"SlateGray",
"SeaGreen",
]
fibo = [0, 1]
suma_ostatnich = fibo[-1]+fibo[-2]
gorna_granica = 77
while suma_ostatnich <= gorna_granica:
fibo.append(suma_ostatnich)
suma_ostatnich = fibo[-1]+fibo[-2]
print(fibo)
# [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
dl_boku = 20
for mnoznik in fibo[1:]:
zolwik.fillcolor(random.choice(kolory))
zolwik.begin_fill()
for _ in range(5):
zolwik.forward(dl_boku*mnoznik)
zolwik.left(90)
zolwik.end_fill()
zolwik.forward(dl_boku*mnoznik)
turtle.exitonclick()

Szyfrowanie symetryczne - przesyłany klucz może być utracony, trudno wymyślić bezpieczną metodę przekazu klucza.

Szyfrowanie asymetryczne - jeden klucz do szyfrowania a drugi do odszyfrowania.


Szyfr Cezara - wymyślamy klucz liczbowy i zamieniamy na inny "a" = 1, "b" = 2. abba - bccb ; a = 0+1;
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",
"Ą",
"ą",
"Ć",
"ć",
"Ę",
"ę",
"Ł",
"ł",
"Ń",
"ń",
"Ó",
"ó",
"Ś",
"ś",
"Ź",
"ź",
"Ż",
"ż",
" ",
".",
"?",
"!",
]
# powyższa lista znaków ułatwi stworzenie kodu odpowiedzialnego za szyfrowanie
# żeby przy bardzo dużym kluczu , lub przy zamianie znaku z końca listy nie wyjść za nią
# można skorzystać z operatora modulo (to ten od reszty z dzielenia)
# wg. schematu (indeksznaku + klucz) % len(ZNAKI)
# indeksznaku = ZNAKI.index("!")
# print(f"Indeks znaku to: {indeksznaku}")
# klucz = 3
# nowy_indeks = (indeksznaku + klucz) % len(ZNAKI)
# print(f"Po przesunieciu o {klucz} uzyskamy {nowy_indeks}")
# jeśli nie chcemy skorzystać z naszej własnej tablicy znaków,
# to można to też zrobic korzystajac z tablicy znaków Unicode.
# Przydadzą się wtedy funkcje:
# ord - zwraca nr unicode znaku
# chr - zwraca znak po podaniu nr unicode
do_zaszyfrowania = (input("wprowadz tekst: "))
klucz = int(input("wprowadź klucz: "))
for litera in do_zaszyfrowania:
indeksznaku = ZNAKI.index(litera)
nowy_indeks = (indeksznaku + klucz) % len(ZNAKI)
print(ZNAKI[nowy_indeks], end="")