Шифр Цезаря — один из древнейших шифров. Каждая буква текста заменяется на букву, отстоящую от неё на фиксированное число позиций в алфавите. Назван в честь Юлия Цезаря, который использовал этот шифр для секретной переписки.
В этом проекте мы создадим программу для шифрования и расшифровки текста.
Создать программу, которая:
for для перебора символов.ord() и chr() для работы с кодами символов.def) для структурирования кода.def)В этом проекте мы будем использовать собственные функции — именованные блоки кода, которые можно вызывать по имени. Функция создаётся так:
def имя_функции(параметр1, параметр2):
# код функции с отступом
return результат # вернуть значениеФункции позволяют разбить задачу на части: encrypt_char шифрует одну букву, encrypt — весь текст, decrypt — расшифровывает. Подробнее о функциях мы узнаем в модулях 22–26, а здесь используем базовый синтаксис.
ord() и chr()ord() возвращает код символа (число), chr() — символ по коду.
print(ord('A')) # 65
print(ord('a')) # 97
print(chr(65)) # 'A'
print(chr(97)) # 'a'
# Коды букв идут подряд
print(ord('B') - ord('A')) # 1
print(ord('Z')def encrypt_char(char, shift):
if char.isupper():
# Заглавные буквы A-Z (коды 65-90)
base = ord('A')
return chr((ord(char) - base + shift) % 26 + base)
elif char.islower():
# Строчные буквы a-z (коды 97-122)
base =
def encrypt(text, shift):
result = ""
for char in text:
result += encrypt_char(char, shift)
return result
# Тест
message = "Hello, World!"
encrypted = encrypt(message, 3)
print(encrypted) # Khoor, Zruog!Расшифровка — это шифрование со сдвигом в обратную сторону.
def decrypt(text, shift):
return encrypt(text, -shift)
# Тест
decrypted = decrypt("Khoor, Zruog!", 3)
print(decrypted) # Hello, World!def encrypt_char(char, shift):
if char.isupper():
base = ord('A')
return chr((ord(char) - base + shift) % 26 + base)
elif char.islower():
base = ord('a')
return
Для русского алфавита нужно учитывать его особенности (33 буквы).
def encrypt_char_ru(char, shift):
russian_lower = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
russian_upper = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
if char in russian_lower:
index = russian_lower.index(char)
new_index = (index + shift) % 33
return russian_lower[new_index]
elif char in russian_upper:
# === ШИФР ЦЕЗАРЯ ===
def encrypt_char(char, shift):
"""Шифрует один символ (английский алфавит)"""
if char.isupper():
base = ord('A')
return chr((ord(char) - base + shift) % 26 + base)
elif char.islower():
base =
Поздравляю! Ты создал программу для шифрования и расшифровки текста. Ты научился:
ord, chr).Этот проект — отличная основа для изучения более сложных шифров!
Добавь в программу поддержку русского алфавита. Используй строку с буквами для поиска индекса.
Объедини шифрование и расшифровку в одну функцию, которая принимает параметр mode ("encrypt" или "decrypt").
Напиши функцию, которая выводит все 26 вариантов расшифровки текста (для всех возможных сдвигов).
ROT13 — популярный вариант шифра Цезаря со сдвигом 13. Его особенность: шифрование и расшифровка — одна и та же операция. Реализуй функцию rot13(text).
Шифр Виженера — усложнённый вариант шифра Цезаря. Вместо одного сдвига используется ключевое слово. Каждая буква ключа определяет сдвиг для соответствующей буквы текста.
Пример: текст HELLO, ключ KEY → сдвиги: K=10, E=4, Y=24 (циклически).
Напиши функцию, которая получает зашифрованный текст (англ.) и выводит вариант расшифровки, предполагая, что самая частая буква в тексте — это e (самая частотная в английском). Подсказка: найди самую частую букву, вычисли сдвиг до e, примени расшифровку.
Шифр Атбаш: A↔Z, B↔Y, C↔X, ... Реализуй функцию atbash(text), которая шифрует/расшифровывает текст (для английского алфавита).