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

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

31.01.2021, 18:20. Показов 3930. Ответов 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
8851 / 4502 / 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
8851 / 4502 / 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
8851 / 4502 / 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
8851 / 4502 / 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
8851 / 4502 / 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
Ответ Создать тему
Новые блоги и статьи
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru