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

Шифр Цезаря

15.07.2017, 23:57. Показов 12026. Ответов 12
Метки нет (Все метки)

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

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
word = input('Введите текст на русском языке для зашифровки\nP.S.символы, отсутствующие в русском алфавите, будут переданы без изменений,\nрегистр символов не учитывается:\n').lower()
Al = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я']
new_W = []
for i in word:
    if i  not in Al:
             new_W.append(i)
    else:
        new_W.append(Al[Al.index(i)+3])
with open('word.txt','w') as f:
    for i in new_W:
        f.write(i)
with open('word.txt','r') as f:
    print('Зашифрованный текст:\n',f.read())
system('del word.txt')
system('pause')
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.07.2017, 23:57
Ответы с готовыми решениями:

Шифр Цезаря
Саму задачу сделал, но выводится все без пробелов. К примеру, вводим строку 'In a hole in the ground there lived a hobbit.', должна...

Шифр Цезаря
Младшему брату Васи так понравился шифр Цезаря, что он теперь шифрует всё подряд. Васе тоже нравится шифр Цезаря, но не настолько. Поэтому...

Шифр цезаря
str="абвгдеежзийклмнопрстуфхцчшщъюьэюя" print("enter key") key=int(input()) print("enter word") word=input() for j in...

12
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
16.07.2017, 02:13
Отступов нет, код не будет работать
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
16.07.2017, 12:52  [ТС]
Цитата Сообщение от oldnewyear Посмотреть сообщение
р
Я знаю, что не будет, просто комп выключался - я торопился скопировать.

Добавлено через 4 минуты
Цитата Сообщение от oldnewyear Посмотреть сообщение
Отступов нет, код не будет работать
Комп выключался и я торопился скопировать, а так-то отступы есть и все работает, но хотелось сделать код более грамотным.
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
16.07.2017, 14:48
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import os
 
Al = set(map(chr, range(0x0430, 0x0452)))
word = input(
'''Введите текст на русском языке для зашифровки
P.S.символы, отсутствующие в русском алфавите, будут переданы без изменений,
регистр символов не учитывается:\n''').lower()
 
ans = ''.join(chr(ord(x)+3) if x in Al else x for x in word)
 
with open('word.txt', encoding='utf-8', mode='w') as f:
    f.write(ans)
with open('word.txt', encoding='utf-8') as f:
    print('Зашифрованный текст:\n',f.read())
 
os.remove('word.txt')
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
16.07.2017, 15:59  [ТС]
Объясните эти строчки, если нетрудно:
Цитата Сообщение от oldnewyear Посмотреть сообщение
ans = ''.join(chr(ord(x)+3) if x in Al else x for x in word)
Цитата Сообщение от oldnewyear Посмотреть сообщение
Al = set(map(chr, range(0x0430, 0x0452)))
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
16.07.2017, 16:26
Цитата Сообщение от DarkChirik Посмотреть сообщение
Объясните эти строчки, если нетрудно:
1. Эквивалент
Python
1
2
3
4
5
for x in word:
   if x in Ai:
      ans = ans + '' + chr(ord(x) + 3)  #ord возвращает код символа, chr - символ кода
   else:
      ans = ans + '' + x
2. создается множество символов кириллицы от a до я в UTF-8. И ё в конце. Там, правда, еще перед ё крокозябра
1
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
16.07.2017, 20:03  [ТС]
Цитата Сообщение от oldnewyear Посмотреть сообщение
(0x0430, 0x0452)))
Спасибо. А как можно получить адреса букв в таком виде?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
16.07.2017, 23:16
Это не адреса. Это unicode codepoints.
Python
1
2
3
4
5
6
7
8
>>ord('а')
1072
>>ord('б')
1073
>>ord('в')
1074
...
P.S. Это integer значения. В коде поста №4 используются их hexadecimal эквиваленты.
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
17.07.2017, 00:30  [ТС]
Эти значения вычисляются на калькуляторе или есть способ получить их с помощью функции? У них есть какие-то преимущества перед десятеричными? Извиняюсь завалил вопросами, интересно просто почему не 1074-1103, а именно hex
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
20.07.2017, 05:56
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
27
#!/usr/bin/env python3
 
shift = 3
 
chars = list(map(chr, range(ord('а'), ord('я')+1)))
chars2 = chars[shift:] + chars[:shift]
assert len(chars) == len(chars2)
 
print(chars)
print(chars2)
 
d = {}
for i in range(len(chars)):
    d[chars[i]] = chars2[i]
 
print(d)
 
text = input('''\
Введите текст на русском языке для зашифровки
P.S. символы, отсутствующие в русском алфавите, будут переданы без изменений,
регистр символов не учитывается:
''').lower()
 
text2 = ''.join(map(lambda x: d.get(x,x), text))
print('''
Зашифрованный текст:
%s''' % text2)
Добавлено через 7 минут
Python
1
d = dict(zip(chars, chars2))
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
20.07.2017, 17:46  [ТС]
Спасибо. А zip будет работать в питоне 3: где-то читал, что его работу как-то изменили? Как им правильно пользоваться?
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
d = dict(zip(chars, chars2))
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
20.07.2017, 17:50
Цитата Сообщение от DarkChirik Посмотреть сообщение
А zip будет работать в питоне 3:
Пробовал на третьем - работает.

Цитата Сообщение от DarkChirik Посмотреть сообщение
Как им правильно пользоваться?
Видимо, придётся все-таки почитать документацию.
0
2 / 2 / 0
Регистрация: 23.06.2017
Сообщений: 72
20.07.2017, 20:22  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Видимо, придётся все-таки почитать документацию.
Наверное XD )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.07.2017, 20:22
Помогаю со студенческими работами здесь

Шифр Цезаря
Приветствую. Код: q = "abcde abc" for i in q: w = chr(ord(i) + 1) print(w) как сделать чтобы чтобы python выводил...

Шифр Цезаря
Привет! Ребята, подскажите пожалуйста, как мне в этом коде учесть регистр букв? Только постарайтесь без сложных функций или тогда поясняйте...

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

Шифр Цезаря
Нужно написать программу, которая будет шифровать и расшифровывать текст и объяснением кода.

Шифр Цезаря
Можете объяснить каждую строчку кода. step = int(input()) word = input() for i in word: if chr(ord(i)) == ' ' or...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru