Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
2 / 2 / 1
Регистрация: 06.06.2019
Сообщений: 26

Зашифровать сообщение шифром Цезаря(езЦяар)

31.01.2021, 18:20. Показов 3872. Ответов 9

Студворк — интернет-сервис помощи студентам
Напишите программу, которая шифрует входной текст шифром езЦяар:

*алфавит - строчные буквы русского алфавита без ё
*ключ состоит из пары чисел A, B; гарантируется, что A%2!=B%2 и что A<B
*алфавит разрезается на четыре части - до А (не включая А), первая половина АВ, вторая половина АВ, после В (не включая В); *нумерация букв с нуля
*первая половина АВ переставляется в начало алфавита
*вторая половина АВ переставляется в конец алфавита
*части, которые раньше стояли до А и после В, смыкаются
*получившийся алфавит используется как шифрованный для простой подстановки

Например, если бы алфавит состоял из букв "абвгдежз" с ключом (2, 5), то шифрованный алфавит выглядел бы как "вгабжзде", и сообщение "деда" было бы закодировано как "жзжв".

Формат входных данных
Программа получает на вход строку А из строчных кириллических символов - сообщение, и на следующей строке два целых числа от 0 до 32 через пробел - ключ.

Формат выходных данных
Программа выводит результат шифрования строки А шифром езЦяар с предлагаемым ключом.

Пример:
Ввод:
приветмир
7 14

Вывод:
уфдйбцрдф

Мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
dict1=[]
 
for i in range(1072,1103+1):
  dict1.append(chr(i))
def crypt(alfb,k,txt):
  S1 = ''
  for symb in txt:
    if symb in alfb:
      S1 += alfb[(alfb.index(symb) + k) % len(alfb)]
    else:
      S1 += symb
  return S1
 
#S=input()
p,q=map(int, input().split())
 
w=(q-p)//2+p
dict2=dict1[p:w]+dict1[: p-1]+dict1[q:]+dict1[w:q-1]
 
#S1 = crypt(dict2,a,S)
#print(S1)
Я не понимаю как произвести шифровку без сдвига.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.01.2021, 18:20
Ответы с готовыми решениями:

Зашифровать файл шифром Цезаря
Зашифруйте данный текстовый файл шифром Цезаря, при этом символы первой строки файла должны циклически сдвигаться на 1, второй строки — на...

Зашифровать файл шифром цезаря
Зашифруйте данный текстовый файл шифром Цезаря, при этом символы первой строки файла должны циклически сдвигаться на 1, второй строки — на...

Расшифровать сообщение, закодированное шифром Цезаря с неизвестным сдвигом
Необходимо расшифровать сообщение, закодированное шифром Цезаря с неизвестным сдвигом: &quot;ХШЖНПУТ ФКХКОЙКТ&quot;. Всё что я...

9
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.01.2021, 20:36
blaurhor, так?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
dict1=[]
 
for i in range(1072,1103+1):
  dict1.append(chr(i))
def crypt(alfb,alfa,txt):
  S1 = ''
  for symb in txt:
    #if symb in alfb:
      S1 += alfb[(alfa.index(symb))] #% len(alfb)]
    #else:
      #S1 += symb
  return S1
 
S=input()
p,q=map(int, input().split())
 
w=(q-p+1)//2+p
dict2=dict1[p:w]+dict1[: p-1]+dict1[q:]+dict1[w:q-1]
 
S1 = crypt(dict2,dict1,S)
print(S1)
1
2 / 2 / 1
Регистрация: 06.06.2019
Сообщений: 26
31.01.2021, 21:15  [ТС]
Gdez, предложенный вами код проходит по данному решению.
Можете помочь, не проходит второй тест по диапазону : 0 31. Должно выдаваться "паивевмиа", а выводит "приветмир".
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.01.2021, 21:45
blaurhor, по логике должно пяивесмия при 0 31

Добавлено через 2 минуты
blaurhor,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
dict1=[]
 
for i in range(1072,1103+1):
  dict1.append(chr(i))
def crypt(alfb,alfa,txt):
  S1 = ''
  for symb in txt:
    #if symb in alfb:
      S1 += alfb[(alfa.index(symb))] #% len(alfb)]
    #else:
      #S1 += symb
  return S1
 
S=input()
p,q=map(int, input().split())
 
w=(q-p+1)//2+p
tmp = dict1[: p-1] + dict1[q:] if p else dict1[q:]
if q :
    dict2=dict1[p:w]+tmp+dict1[w:q-1]
else :
    dict2 = dict1.copy()
print(dict1)
print(dict2)
S1 = crypt(dict2,dict1,S)
print(S1)
Добавлено через 1 минуту
Хотя условие с q лишнее - A<B
0
2 / 2 / 1
Регистрация: 06.06.2019
Сообщений: 26
31.01.2021, 21:52  [ТС]
Gdez, простите вышла ошибка. Теперь выдаёт, что в диапазоне 0 31 должно выводиться "приветмир".
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.01.2021, 22:23
blaurhor, упустили - ё тоже входит
два целых числа от 0 до 32 через пробел - ключ.
Итого 33 буквы
0
2 / 2 / 1
Регистрация: 06.06.2019
Сообщений: 26
31.01.2021, 22:24  [ТС]
Gdez там в условии сказано, что берётся алфавит без "ё".
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.01.2021, 22:27
Лучший ответ Сообщение было отмечено blaurhor как решение

Решение

blaurhor, попробуй
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dict1=[]
 
for i in range(1072,1103+1):
  dict1.append(chr(i))
#dict1.insert(6, 'ё')
def crypt(alfb,alfa,txt):
  S1 = ''
  for symb in txt:
      S1 += alfb[(alfa.index(symb))]
  return S1
 
S=input()
p,q=map(int, input().split())
 
w=(q-p+1)//2+p 
dict2 = dict1.copy()
for i in range(w, q+1) :
    dict2.insert(31, dict2.pop(w))
    dict2.insert(0, dict2.pop(w-1))
#print(dict2)
 
S1 = crypt(dict2,dict1,S)
print(S1)
1
2 / 2 / 1
Регистрация: 06.06.2019
Сообщений: 26
31.01.2021, 22:37  [ТС]
Gdez, спасибо. Оно работает. Что значит "dict2.pop"?
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.01.2021, 22:52
blaurhor,
Возвращает элемент [на указанной позиции], удаляя его из списка.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.01.2021, 22:52
Помогаю со студенческими работами здесь

Проблема с шифром Цезаря
Добрый день! Уважаемые форумчане, прошу Вашей помощи, т.к в этом деле новичок. Делаю ДЗ и возникло ряд проблем: 1. как поправить...

Шифрование сообщения шифром Цезаря
Напишите функцию encrypt_caesar(msg, shift), которая кодирует сообщение шифром Цезаря и возвращает его. Шифр Цезаря заменяет каждую букву в...

Кодирование/декодирование данных шифром Цезаря
Здравствуйте! Помогите, пожалуйста, с решением одной любой из следующих задач! Программирование у меня не профилирующий предмет, и я в нём...

Составить шифратор(расшифратор) с шифром Цезаря
Смысл в этом шифре таков.Например у нас есть слово &quot;снег&quot;,если мы его зашифруем,то получим &quot;тоёд&quot;.В этом шифре каждая буква слова...

Зашифровать послание с помощью шифра Цезаря с заданным шагом шифрования
Как известно, Цезарь тоже пользовался шифрованием сообщений, причем у него был свой способ. Сначала выбирается шаг шифрования (число), а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru