Найти - Пользователи
Полная версия: СРОЧНО!!! Задача "Шифр Цезаря"
Начало » Python для новичков » СРОЧНО!!! Задача "Шифр Цезаря"
1
Elli1999
ОЧЕНЬ НУЖНО!!! Помогите с задачей! Нужно к зачету, а основ самого языка даже не знаю

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

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

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

Выходные данные
Программа должна вывести шифрованные строчки.
Аналогично создать программу расшифровки файла зашифрованного алгоритмом Цезаря.
marvellik
в чем трудности?
Elli1999
трудность в том, чтобы написать эту задачу
marvellik
 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))
py.user.next
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
FishHook
py.user.next
У Юлия Цезаря кроме шифра ещё много чего было, поэтому функция с таким названием может возвращать что угодно, связанное с ним (возраст, дату рождения, историческую справку). Поэтому надо специфицировать.
cipher_of_gai_ylii_cezar

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

После функции чифир_гая_юлия_цезаря логично было бы заварить_чефир_гаю_юлию_цезарю
marvellik
py.user.next это был чисто прикол на вопрос без единой попытки написать хоть строчку кода чтения из файла данных.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB