Что нужно сделать
Юлий Цезарь использовал свой способ шифрования текста. Каждая буква заменялась на следующую по алфавиту через K позиций по кругу. Если взять русский алфавит и K = 3, то в слове, которое мы хотим зашифровать, буква А станет буквой Г, Б станет Д и так далее.
Пользователь вводит сообщение, а также значение сдвига. Напишите программу, которая зашифрует это сообщение при помощи шифра Цезаря.
Пример:
Введите сообщение: это питон.
Введите сдвиг: 3
Зашифрованное сообщение: ахс тлхср.
ПРИМЕЧАНИЕ ОТ ПРЕПОДАВАТЕЛЯ:
Нужно использовать остаток от деления, чтобы подходил любой код. Плюс в этом модуле желательно использовать List comprehensions для формирования списка новых букв.
Python
Введите сообщение: это питон
Введите сдвиг: 3
Зашифрованное сообщение: ахс тлхср
Process finished with exit code 0
alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
text = input('Введите сообщение: ')
step = int(input('Введите сдвиг: '))
encrypted = [alphabet[(alphabet.index(i) + step) % len(alphabet)]
if i in alphabet else i for i in text.lower()]
print('Зашифрованное сообщение:', end=' ')
for j in encrypted:
print(j, end='')
Задача 8. Шифр Цезаря
>>>
Для русского алфавита в ord (номера символов в таблице Юникода) поменять с "a","z", на русские "а", "я"
Для русского алфавита в ord (номера символов в таблице Юникода) поменять с "a","z", на русские "а", "я"

Анчугов Константин
И получить геморрой с буквой Ё, которая находится вне диапазона А-Я.
Виталий Калиничев
Не рабочий кол
t = ['АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя']
s, k, res = input('Введите сообщение: '), int(input('Введите сдвиг: ')), ''
for ch in s: # цикл по символам кодируемой строки
for r in t: # цикл по таблицам замены
if (p := r.find(ch)) >= 0: # если нашли букву в таблице замены
ch = r[(p + k) % len(r)] # перекодируем её
break # и заканчиваем поиск
res += ch
print('Зашифрованное сообщение:', res)
Проблема кириллицы в том, что во всех популярных кодировках код буквы Ё находится вне диапазона кодов букв А-Я. Так что простое прибавление k к коду буквы работает неправильно.Вот решение задачи с использованием остатка от деления и генератора списка (list comprehensions):
```python
message = input("Введите сообщение: ")
shift = int(input("Введите сдвиг: "))
encrypted_message = ""
for char in message:
if char.isalpha(): # проверяем, является ли символ буквой
if char.isupper(): # проверяем, является ли буква заглавной
encrypted_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
else:
encrypted_char = chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
encrypted_message += encrypted_char
else:
encrypted_message += char
print("Зашифрованное сообщение:", encrypted_message)
```
В этом решении мы проходимся по каждому символу в сообщении. Если символ является буквой, мы проверяем, является ли он заглавной (`isupper()`) или строчной. Затем мы применяем шифр Цезаря, используя остаток от деления и сдвиг, и получаем новую букву (`chr()` для преобразования числа в символ). Новая буква добавляется к зашифрованному сообщению. Если символ не является буквой, мы его просто добавляем к зашифрованному сообщению без изменений.
Надеюсь, это поможет! Если у вас есть ещё вопросы, не стесняйтесь задавать.
```python
message = input("Введите сообщение: ")
shift = int(input("Введите сдвиг: "))
encrypted_message = ""
for char in message:
if char.isalpha(): # проверяем, является ли символ буквой
if char.isupper(): # проверяем, является ли буква заглавной
encrypted_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
else:
encrypted_char = chr((ord(char) - ord('a') + shift) % 26 + ord('a'))
encrypted_message += encrypted_char
else:
encrypted_message += char
print("Зашифрованное сообщение:", encrypted_message)
```
В этом решении мы проходимся по каждому символу в сообщении. Если символ является буквой, мы проверяем, является ли он заглавной (`isupper()`) или строчной. Затем мы применяем шифр Цезаря, используя остаток от деления и сдвиг, и получаем новую букву (`chr()` для преобразования числа в символ). Новая буква добавляется к зашифрованному сообщению. Если символ не является буквой, мы его просто добавляем к зашифрованному сообщению без изменений.
Надеюсь, это поможет! Если у вас есть ещё вопросы, не стесняйтесь задавать.
Олег Качанов
Не поможет. О чем и передай своему боту
def caesar_cipher(message, shift):
encrypted_message = ""
for char in message:
if char.isalpha():
if char.isupper():
encrypted_message += chr((ord(char) - ord('А') + shift) % 32 + ord('А'))
else:
encrypted_message += chr((ord(char) - ord('а') + shift) % 32 + ord('а'))
else:
encrypted_message += char
return encrypted_message
message = input("Введите сообщение: ")
shift = int(input("Введите сдвиг: "))
encrypted_message = caesar_cipher(message, shift)
print("Зашифрованное сообщение:", encrypted_message)
Вот результат:Введите сообщение: это питон
Введите сдвиг: 3
Зашифрованное сообщение: ахс тлхср
Process finished with exit code 0
- Шифр с заменой заглавных букв на маленькие
alphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'
text = input('Введите сообщение: ')
step = int(input('Введите сдвиг: '))
encrypted = [alphabet[(alphabet.index(i) + step) % len(alphabet)]
if i in alphabet else i for i in text.lower()]
print('Зашифрованное сообщение:', end=' ')
for j in encrypted:
print(j, end='')
Похожие вопросы
- Задача 8. Симметричная последовательность
- 4 задачи по темам:Массивы,Строки,Циклы,условный оператор
- Решение задачи по программированию (желательно питон) Сложность O(квадрат(n))
- Как понять логику решения следующей задачи "ДЛЯ НАЧИНАЮЩИХ"?
- Не могу решать задачи на целочисленную арифметику в питоне.
- Расшифруйте шифр Виженера, помогите
- Информатика 8 класс/Задача на python
- нужно написать задачи на питоне
- Как научиться понимать и решать поставленные задачи в программирование?
- Математика и решения задачи