Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 10, 2017 18:00:00

Elli1999
Зарегистрирован: 2017-12-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

СРОЧНО!!! Задача "Шифр Цезаря"

ОЧЕНЬ НУЖНО!!! Помогите с задачей! Нужно к зачету, а основ самого языка даже не знаю

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

В этой задаче удобно считывать файл построчно, шифруя каждую строку в отдельности.

Входные данные
В каждой строчке содержатся различные символы. Шифровать нужно только буквы латинского алфавита.

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

Отредактировано Elli1999 (Дек. 10, 2017 18:01:27)

Офлайн

#2 Дек. 10, 2017 18:30:22

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

СРОЧНО!!! Задача "Шифр Цезаря"

в чем трудности?

Офлайн

#3 Дек. 10, 2017 18:32:52

Elli1999
Зарегистрирован: 2017-12-10
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

СРОЧНО!!! Задача "Шифр Цезаря"

трудность в том, чтобы написать эту задачу

Офлайн

#4 Дек. 10, 2017 18:45:47

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

СРОЧНО!!! Задача "Шифр Цезаря"

 def gai_ylii_cezar(i,x):
    i += 1
    code = ''
    for j in x:
        if j.isalpha():
            code += chr(ord(j)+i)
        else:
            code += j
    return code
with open('filename.txt') as fil:
    for i,x in enumerate(fil.readlines()):
        print(gai_ylii_cezar(i,x))

Отредактировано marvellik (Дек. 10, 2017 18:46:03)

Офлайн

#5 Дек. 11, 2017 02:04:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

СРОЧНО!!! Задача "Шифр Цезаря"

marvellik
 def gai_ylii_cezar(i,x):
1)
Функцию надо называть императивно. Название должно отвечать на вопрос “что сделать?”.
2)
А ещё при назывании функции нужно задать себе вопрос “а можно ли ещё что-нибудь назвать этим именем?”. Если можно что-то ещё назвать, то надо специфицировать имя, пока им ничего другого не назовёшь.

У Юлия Цезаря кроме шифра ещё много чего было, поэтому функция с таким названием может возвращать что угодно, связанное с ним (возраст, дату рождения, историческую справку). Поэтому надо специфицировать.
cipher_of_gai_ylii_cezar

Дальше надо сделать название императивным, чтобы функции можно было приказывать. Приказываю сделать что?
encrypt_by_cipher_of_gai_ylii_cezar

Есть и ещё один способ создания имени функции - с использованием предусловия и постусловия функции. Берутся предусловие и постусловие (утверждение до входа в функцию и утверждение после выхода из функции), объединяются в одно длинное название (в нём ясно, что предусловие переводит данные в постусловие), а потом это укорачивается до короткой фразы. Фраза должна легко отвечать на вопрос “что делает эта функция?”. Получается имя функции в декларативной форме. Потом имя функции из декларативной формы превращается в императивную и уже отвечает на вопрос “что сделать?”.

Например:
1)
предусловие: на входе - исходная строка символов
постусловие: в результате - строка символов, зашифрованная шифром Цезаря
2)
Объединяем их в одну фразу:
исходная строка символов переводится в строку символов, зашифрованную шифром Цезаря
3)
a) Укорачиваем:
переводит строку в зашифрованную строку шифром Цезаря
b) Укорачиваем ещё:
шифрует строку шифром Цезаря
5)
Переводим из декларативной формы в императивную:
шифровать строку шифром Цезаря
6)
Переводим на английский:
encrypt_string_by_cezar_cipher


tags: naming



Отредактировано py.user.next (Дек. 11, 2017 02:15:38)

Офлайн

#6 Дек. 11, 2017 05:03:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

СРОЧНО!!! Задача "Шифр Цезаря"

py.user.next
У Юлия Цезаря кроме шифра ещё много чего было, поэтому функция с таким названием может возвращать что угодно, связанное с ним (возраст, дату рождения, историческую справку). Поэтому надо специфицировать.
cipher_of_gai_ylii_cezar

Дальше надо сделать название императивным, чтобы функции можно было приказывать. Приказываю сделать что?
encrypt_by_cipher_of_gai_ylii_cezar

После функции чифир_гая_юлия_цезаря логично было бы заварить_чефир_гаю_юлию_цезарю



Офлайн

#7 Дек. 11, 2017 06:34:53

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

СРОЧНО!!! Задача "Шифр Цезаря"

py.user.next это был чисто прикол на вопрос без единой попытки написать хоть строчку кода чтения из файла данных.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version