Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/88: Рейтинг темы: голосов - 88, средняя оценка - 4.70
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432

Шифр Цезаря

11.02.2016, 00:12. Показов 18336. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Саму задачу сделал, но выводится все без пробелов. К примеру, вводим строку 'In a hole in the ground there lived a hobbit.', должна получиться строка 'Lq d kroh lq wkh jurxqg wkhuh olyhg d kreelw.', а выводится 'Lqdkrohlqwkhjurxqgwkhuholyhgdkreelw.' Вопрос в том, как сделать эти пробелы? Попытался через or сделать, но что-то не особо получается=(
Задание:
В шифре Цезаря каждый символ заменяется на другой символ, третий по счету в алфавите после данного, с цикличностью. То есть символ A заменяется на D, символ B - на E, символ C - на F, ..., символ Z на C. Аналогично строчные буквы заменяются на строчные буквы. Все остальные символы не меняются.
Дана строка, зашифруйте ее при помощи шифра Цезаря.


То, что получилось
Python
1
2
text = input().split()
print(''.join(chr(ord(text[i][j:j+1]) + 3) or ' ' if ord(text[i][j:j+1])+3 <= ord('x')+1 or ord(text[i][j:j+1]) <= ord(' ') else chr(ord(text[i][j:j+1])-23) for i in range(len(text)) for j in range(len(text[i]))))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2016, 00:12
Ответы с готовыми решениями:

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

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

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

9
338 / 67 / 37
Регистрация: 22.12.2010
Сообщений: 138
11.02.2016, 00:18
может так проще будет?
Python
1
2
3
4
5
6
7
8
9
10
text = 'In a hole in the ground there lived a hobbit.'
#или text=input('type text')
ans = ' '
for letter in text:
    if(letter != ' '):
        ans += " ".join(chr(ord(letter)+3))
    else:
        ans += " ".join(' ')
 
print(ans)
если же останавливаться на вашем варианте, то я бы убрал split при input:
Python
1
2
text = input()
print(''.join(chr(ord(text[i][j:j+1]) + 3) if ord(text[i][j:j+1])+3 <= ord('x')+1 else chr(ord(text[i][j:j+1])-23) for i in range(len(text)) for j in range(len(text[i]))))
в таком случае вывод будет:
Python
1
2
3
In a hole in the ground there lived a hobbit
Lq#d#kroh#lq#wkh#jurxqg#wkhuh#olyhg#d#kreelw
***Repl Closed***
Вам останется добавить условие, при котором пробелы не меняются на #.
1
 Аватар для YakobsEA
268 / 96 / 75
Регистрация: 04.12.2015
Сообщений: 369
Записей в блоге: 1
11.02.2016, 00:18
Можно так, правда в конце пробел появляется, но это не критично наверное?..
Python
1
2
text = input().split()
print(''.join((chr(ord(text[i][j:j+1]) + 3) + ' ') if ord(text[i][j:j+1])+3 <= ord('x')+1 else (chr(ord(text[i][j:j+1])-23) + ' ') for i in range(len(text)) for j in range(len(text[i]))))
Ой, нет, нельзя... Не ругайте меня...
0
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
11.02.2016, 00:53  [ТС]
DocC, спасибо! Надоумил на такую мысль=) Правда с точкой в конце строки так и остался косяк=( Есть варианты как сюда правильно .isdigit() "приварить"?
Python
1
2
text = 'In a hole in the ground there lived a hobbit.'
print((''.join(chr(ord(text[i][j:j+1]) + 3) if ord(text[i][j:j+1])+3 <= ord('x')+1 else chr(ord(text[i][j:j+1])-23) for i in range(len(text)) for j in range(len(text[i])))).replace('#', ' '))
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
11.02.2016, 00:56
Zodt, Если Вы делаете input().split() — т.е. убираете пробелы, то Вы их где-то возвращайте.
А вообще миллион топиков на эту тему — найдите, там были решения.
0
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
11.02.2016, 01:01  [ТС]
Marinero, решение данной задачи простое, мне интересно как это решение в 2 строки записать=)
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
11.02.2016, 01:13
https://www.cyberforum.ru/pyth... ost8323718
0
171 / 92 / 71
Регистрация: 10.05.2014
Сообщений: 432
11.02.2016, 01:20  [ТС]
Marinero, Вы точно читали все сообщения топика? Мне единственное что осталось, так это прикрутить к моему решению .isdigit() и все. Решение самой задачи я знаю. Но я хочу его записать в 2 строчки. Вот и все
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
11.02.2016, 01:47
Zodt, А Вы точно читали что по ссылке? Я понимаю что свое как-то ближе, но есть и более красивые решения

Добавлено через 20 минут
В одну строку
Python
1
2
3
print(*(chr(z + 3) if 64 < z < 88 or 96 < z < 120 else
        chr(z - 22) if 87 < z < 91 or 119 < z < 123 else
        chr(z) for z in map(ord, input())), sep="")
0
0 / 0 / 0
Регистрация: 09.04.2016
Сообщений: 31
01.03.2017, 13:37
Ребят хелп, я тут пишу код на основе вышеописанного(код DocC) но только с Tkinter. Программа выходит за рамки алфавита ASCII(65-90) и возвращает мне символы(в случае если b>90).
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
28
def encode():
    b=' '
    a=str(ent1.get())
    key=int(ent2.get())
    a=a.upper()
    for letter in a:
        if(letter !=' '):
            b = ((ord(letter))+key)
            if b>=90:
                b=b-26
            b = chr(b)    
            b +=" ".join(b)
    ent3.insert(2,b)
from tkinter import*
root=Tk()
root.title('Caesar Cipher')
lab1=Label(root,text='Your Message').grid(row=1,column=1) 
lab2=Label(root,text='Key').grid(row=2,column=1)
lab3=Label(root,text='Your Ceaser MSG').grid(row=3,column=1)
ent1=Entry(root) 
ent1.grid(row=1,column=2) 
ent2=Entry(root) 
ent2.grid(row=2,column=2)
ent3=Entry(root)
ent3.grid(row=3,column=2)
but1=Button(root,text='Encode',command=encode) 
but1.grid(row=1,column=3) 
root.mainloop()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.03.2017, 13:37
Помогаю со студенческими работами здесь

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

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

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

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

Шифр Цезаря
Здравствуйте, на сайте впервые,. Мне нужна помощь. Я не совсем понимаю как доработать код Условия: Формат ввода В первой строке...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru