Государственное унитарное предприятие
гамма-установка промышленная
главный учебный корпус
грохот угольный универсальный подвесный
Главное управление полиции
группа управления проектами группа управления проектом
Главное управление перевозок
Гуманитарный университет профсоюзов
главный упорный подшипник
государственное унитарное предприятие
Ghana University Press
перевод: Гана Университета
Graduate Undergraduate Programs
перевод: Выпускник Программы Бакалавриата
Glebe Ultimo Pyr
перевод: Glebe Последнего Цикла
Girls und Panzer
перевод: Девушки и танки
Guide to Unique Photography
перевод: Руководство по уникальные фотографии
Galizian Urban Project
перевод: Проект Городской Galizian
Gallup, New Mexico USA
перевод: Гэллап, Нью-Мексико, США
Green Uni Project
перевод: Проект Зеленый Уни
Gatekeeper Update Protocol
перевод: Протокол Привратник Обновление
Group Update Provider
перевод: Поставщик Группа Обновление
General Use Permit
перевод: Разрешение На Использование
Global Ultimate Parent
перевод: Глобальной Конечной Материнской
Get URL Paramaters
перевод: Получить параметры URL-адреса
General Use Pesticide
перевод: Общее Использование Пестицидов
Транслитерация: GUP
The Global Understanding Project
перевод: Проект Глобального Понимания
Graduate and Undergraduate Programs
перевод: Программ высшего и послевузовского образования
Предыдущая
Следующая
АУ – автономное учреждение
АУК – автономное учреждение культуры
БУ – бюджетное учреждение
БУК – бюджетное учреждение культуры
ГАОУ ВО – государственное автономное образовательное учреждение высшего образования
ГАОУ ДПО – государственное автономное образовательное учреждение дополнительного профессионального образования
ГАПОУ – государственное автономное профессиональное образовательное учреждение
ГАУК – государственное автономное учреждение культуры
ГБОУ – государственное бюджетное образовательное учреждение
ГБПОУ – государственное бюджетное профессиональное образовательное учреждение
ГБУ – государственное бюджетное учреждение
ГБУК – государственное бюджетное учреждение культуры
ГКБУ – государственное краевое бюджетное учреждение
ГКБУК – государственное краевое бюджетное учреждение культуры
ГКУ – государственное казённое учреждение
ГКУК – государственное казённое учреждение культуры
ГОБУК – государственное образовательное бюджетное учреждение культуры
ГОУ ВО – государственное образовательное учреждение высшего образования
ГОУ ВПО – государственное образовательное учреждение высшего профессионального образования
ГПОУ – государственное профессиональное образовательное учреждение
ГУ – государственное учреждение
ГУК – государственное учреждение культуры
КГАУК – краевое государственное автономное учреждение культуры
КГБНУК – краевое государственное бюджетное научное учреждение культуры
КГБУ – краевое государственное бюджетное учреждение
КГКУ – краевое государственное казённое учреждение
КГУ – краевое государственное учреждение
МАОУ – муниципальное автономное общеобразовательное учреждение
МАУ – муниципальное автономное учреждение
МАУК – муниципальное автономное учреждение культуры
МБОУ – муниципальное бюджетное общеобразовательное учреждение
МБУ – муниципальное бюджетное учреждение
МБУДО – муниципальное бюджетное учреждение дополнительного образования
МБУК – муниципальное бюджетное учреждение культуры
МБУКДО – муниципальное бюджетное учреждение культуры дополнительного образования
МКУ – муниципальное казённое учреждение
МКУК – муниципальное казённое учреждение культуры
МУ – муниципальное учреждение
МУК – муниципальное учреждение культуры
НОУ ВПО – негосударственное образовательное учреждение высшего профессионального образования
ОАНО – общеобразовательная автономная некоммерческая организация
ОБУК – областное бюджетное учреждение культуры
ОГАУК – областное государственное автономное учреждение культуры
ОГБУК – областное государственное бюджетное учреждение культуры
ОГКУК – областное государственное казённое учреждение культуры
ФГАОУ ВО – федеральное государственное автономное образовательное учреждение высшего образования
ФГАОУ ВПО – федеральное государственное автономное образовательное учреждение высшего профессионального образования
ФГБВОУ ВО – федеральное государственное бюджетное военное образовательное учреждение высшего образования
ФГБНИУ – федеральное государственное бюджетное научно-исследовательское учреждение
ФГБНУ – федеральное государственное бюджетное научное учреждение
ФГБОУ – федеральное государственное бюджетное образовательное учреждение
ФГБУ – федеральное государственное бюджетное учреждение
ФГБУК – федеральное государственное бюджетное учреждение культуры
ФГБУН – федеральное государственное бюджетное учреждение науки
ФГКВОУ – федеральное государственное казённое военное образовательное учреждение
ФГКОУ – федеральное государственное казённое образовательное учреждение
ФГОУ – федеральное государственное образовательное учреждение
ФГУ – федеральное государственное учреждение
ФГУП – федеральное государственное унитарное предприятие
ФКУ – федеральное казённое учреждение
ФКУК – федеральное казённое учреждение культуры
ЧПОУ – частное профессиональное образовательное учреждение
спросил
Изменено 3 года, 1 месяц назад
Просмотрено 62 раза
Итак, я пишу этот очень простой шифратор и дешифратор на питоне.
класс Шифровать(): def __init__(я, запах): self.scentence = запах шифровальщик защиты (я): результат = [] для письма в self.scentence: л = порядок (буква) + 20 результат .append(l) для чисел в результате: печать (числа, конец = '') печать(" ", конец = '') печать (результат) def расшифровщик (результат): печать (результат) конец_строки = "" для j в результате: л = интервал (j) л = л-20 л = хр(л) конечная_строка = конечная_строка + л print("Расшифрованное сообщение ниже:") печать (конец_строки) f = Шифровать ("привет") f.шифратор() f.расшифровщик()
Итак, когда я запускаю этот код, возникает следующая ошибка
для j в результате: TypeError: объект «Зашифровать» не является итерируемым
Было бы очень полезно, чтобы кто-нибудь объяснил концепцию SELF, OBJECT и CLASS
2 self 2
В Python первым параметром для методов класса всегда является self
(тогда как в других объектно-ориентированных языках, таких как C++ и Java, этот параметр является неявным). Объяснение причин см. в https://stackoverflow.com/a/2709832/4454124. ( self
— это просто условное имя, присвоенное первому параметру, но имя может быть любым, например, self
, this
, банан
или result
)
self
в вашем методе decryptor()
, интерпретатор Python попытается интерпретировать предоставленный вами параметр ( результат
) в качестве параметра self
, что означает, что он ожидает, что он будет иметь тип . Зашифровать
, что не так, отсюда и ошибка.В качестве примечания: в объектно-ориентированной программе имя класса должно быть существительным, а имена методов должны быть глаголами, поэтому в вашей программе у вас будет класс с именем «Шифровщик» и методы с именем «шифрование». и «расшифровать».
1
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и парольЭлектронная почта
Обязательно, но не отображается
Электронная почта
Требуется, но не отображается
Ниже приведен мой код для шифра Ceaser на основе класса, это для MIT 6. 001 Ps4b.py
Вопрос:
В тестовых примерах в конце файла кода (тестовый пример # 02), ожидаемый результат — (24, «привет») .
В то время как фактический вывод программы (2, ‘привет’)
И это имеет смысл, потому что строки 330-332 :
открытый текст = PlaintextMessage('привет', 2) print('Ожидаемый вывод: jgnnq') print('Фактический вывод:', plaintext.get_message_text_encrypted())
создает экземпляр PlaintextMessage со значением сдвига, равным 2. где «jgnnq» — это шифрование «hello».
И строки 335-337:
зашифрованный текст = CiphertextMessage('jgnnq') print('Ожидаемый вывод:', (24, 'привет')) print('Фактический вывод:', ciphertext.decrypt_message())
здесь: строка = ‘jgnnq’ расшифрованная строка = ‘привет’ фактический лучший фактор равен 2, но ожидаемый равен 24 должен напечатать кортеж, содержащий коэффициент, используемый для (де)шифрования строки, и расшифрованную строку (это «привет»).
Итак, мой вопрос: почему ожидаемый «лучший фактор» для тестового примера № 02 равен 24, а коэффициент, используемый для (де)шифрования строки, равен 2.
Тестовые примеры предоставлены MIT OCW и не были изменены моя часть.
Код:
по умолчанию load_words(file_name): ''' file_name (строка): имя файла, содержащего список слов для загрузки Возвращает: список допустимых слов. Слова представляют собой строки строчных букв. В зависимости от размера списка слов эта функция может занять некоторое время, чтобы закончить. ''' # print("Загрузка списка слов из файла...") # inFile: файл inFile = открыть (имя_файла, 'r') # список слов: список строк список слов = [] для строки в inFile: wordlist.extend([word.lower() для слова в строке.split(' ')]) # print(" ", len(wordlist), "слова загружены.") вернуть список слов def is_word(слово_список, слово): ''' Определяет, является ли слово допустимым словом, игнорируя заглавные буквы и знаки препинания word_list (список): список слов в словаре. слово (строка): возможное слово. Возвращает: True, если слово находится в word_list, иначе False.&*()-_+={}[]|\:;'<>?,./\"") вернуть слово в word_list защита get_story_string(): """ Возвращает: рассказ в зашифрованном виде. """ f = открыть ("story.txt", "r") история = ул(f.read()) е.закрыть() история возвращения WORDLIST_FILENAME = 'words.txt' слова = load_words(WORDLIST_FILENAME) Сообщение класса (объект): def __init__(я, текст): ''' Инициализирует объект сообщения text (string): текст сообщения объект Message имеет два атрибута: self.message_text (строка, определяемая введенным текстом) self.valid_words (список, определяемый с помощью вспомогательной функции load_words) ''' self.message_text = текст self.valid_words = load_words(WORDLIST_FILENAME) #self.valid_words = [слово в слово в text.split() if is_word(слова, слово)] защита get_message_text (я): ''' Используется для безопасного доступа к self.message_text вне класса Возвращает: self. message_text ''' вернуть self.message_text защита get_valid_words (я): ''' Используется для безопасного доступа к копии self.valid_words вне класса. Это поможет вам избежать случайного изменения атрибутов класса. Возвращает: КОПИЮ self.valid_words ''' вернуть self.valid_words.copy() def build_shift_dict (я, сдвиг): ''' Создает словарь, который можно использовать для применения шифра к письму. Словарь отображает каждую прописную и строчную букву в символ, сдвинутый вниз по алфавиту на входной сдвиг. Словарь должно быть 52 клавиши всех заглавных букв и всех строчных Только буквы. сдвиг (целое число): величина, на которую нужно сдвинуть каждую букву алфавит. 0 <= сдвиг < 26 Возвращает: словарь, отображающий букву (строку) в другая буква (строка). ''' строчные_буквы = ascii_нижний регистр uppercase_letters = ascii_uppercase # алфавит = строчные_буквы + прописные_буквы #alpha_shifted=алфавит[-shift:] + алфавит[:-shift] нижний регистр_сдвиг = строчные_буквы[сдвиг:] + строчные_буквы[:сдвиг] uppercase_shifted = прописные_буквы[-shift:] + прописные_буквы[:-shift] # shift_dict = {буква: сдвиг на букву, сдвиг в zip (алфавит, алфавит_сдвиг)} shift_dict_lowercase = {буква: сдвиг на букву, сдвиг в zip (lowercase_letters, lowercase_shifted)} shift_dict_uppercase = {буква: сдвиг на букву, сдвиг в zip (uppercase_letters, uppercase_shifted)} вернуть [shift_dict_lowercase, shift_dict_uppercase] def apply_shift (я, сдвиг): ''' Применяет шифр Цезаря к self. message_text со сдвигом ввода. Создает новую строку, которая self.message_text сдвигается вниз алфавит на некоторое количество символов, определяемое входным сдвигом сдвиг (целое число): сдвиг, с помощью которого шифруется сообщение. 0 <= сдвиг < 26 Возвращает: текст сообщения (строка), в котором сдвигается каждый символ вниз по алфавиту сдвигом ввода ''' shift_dict_lowercase, shift_dict_uppercase = self.build_shift_dict(сдвиг) plain_msg = self.message_text зашифрованное_сообщение = [] для символа в plain_msg: если char в ascii_lowercase: зашифрованный_msg.append (shift_dict_lowercase [символ]) elif char в ascii_uppercase: зашифрованный_msg.append (shift_dict_uppercase [char]) еще: зашифрованный_msg.append (символ) # зашифрованный_msg = [shift_dict_lowercase.get(char, char) для char в plain_msg] вернуть ''. join(encrypted_msg) класс PlaintextMessage (Сообщение): def __init__(я, текст, сдвиг): ''' Инициализирует объект PlaintextMessage text (string): текст сообщения сдвиг (целое число): сдвиг, связанный с этим сообщением Объект PlaintextMessage наследуется от Message и имеет пять атрибутов: self.message_text (строка, определяемая введенным текстом) self.valid_words (список, определяемый с помощью вспомогательной функции load_words) self.shift (целое число, определяемое входным сдвигом) self.encryption_dict (словарь, построенный с использованием сдвига) self.message_text_encrypted (строка, созданная с помощью Shift) ''' Сообщение.__init__(я, текст) self.shift = сдвиг self.encryption_dict = self.build_shift_dict(сдвиг) self.message_text_encrypted = self.apply_shift(сдвиг) деф get_shift (я): ''' Используется для безопасного доступа к self. shift вне класса Возвращает: self.shift ''' вернуть self.shift защита get_encryption_dict (я): ''' Используется для безопасного доступа к копии self.encryption_dict вне класса Возвращает: КОПИЮ self.encryption_dict ''' вернуть self.encryption_dict.copy() защита get_message_text_encrypted (я): ''' Используется для безопасного доступа к self.message_text_encrypted вне класса Возвращает: self.message_text_encrypted ''' вернуть self.message_text_encrypted def change_shift (я, сдвиг): ''' Изменяет self.shift сообщения PlaintextMessage и обновляет другие атрибуты, определяемые сдвигом. сдвиг (целое число): новый сдвиг, который должен быть связан с этим сообщением. 0 <= сдвиг < 26 Возвращает: ничего ''' self.__init__(self.message_text, сдвиг) класс CiphertextMessage (Сообщение): def __init__(я, текст): ''' Инициализирует объект CiphertextMessage. text (string): текст сообщения объект CiphertextMessage имеет два атрибута: self.message_text (строка, определяемая введенным текстом) self.valid_words (список, определяемый с помощью вспомогательной функции load_words) ''' Сообщение.__init__(я, текст) # нужно оптимизировать это: деф расшифровать_сообщение (я): ''' Расшифруйте self.message_text, попробовав все возможные значения сдвига и найти "лучший". Мы определим «лучший» как сдвиг, который создает максимальное количество реальных слов, когда мы используем apply_shift(shift) на текст сообщения. Если s является исходным значением сдвига, используемым для шифрования сообщение, то мы ожидаем, что 26 - s будет лучшим значением сдвига для его расшифровки. Примечание: если несколько смен одинаково хороши, то все они создают максимальное количество допустимых слов, вы можете выбрать любую из этих смен (и соответствующие им расшифрованные сообщения), чтобы вернуть Возвраты: кортеж лучшего значения сдвига, используемого для расшифровки сообщения. и расшифрованный текст сообщения с использованием этого значения сдвига ''' # использование словаря для получения максимального количества допустимых слов в строке # нужно выяснить, как проверить, допустимо ли слово после применения # переключиться на него. результаты = {} words_found = {n: [] для n в диапазоне (26)} для n в диапазоне (26): для слова в self.message_text.split(): м = сообщение (слово) слово = m.apply_shift (-n) # печать (слово) если is_word(слова, слово): результаты[n] = результаты.get(n, 0) + 1 words_found[n].append(слово) # распечатать (результаты) # распечатать (слова_найдено) # печать (макс. (результаты)) лучший_фактор = максимум (результаты) вернуть лучший_фактор, PlaintextMessage(self.message_text, -best_factor).get_message_text_encrypted() # num_words_per_factor = {n:len(words_found[n]) для n в диапазоне (26)} # лучший_фактор = # распечатать (лучший_фактор) # plain_text_msg = PlaintextMessage('Привет, Кошка, Собака, Катя', 0) # print(plain_text_msg. get_message_text()) # зашифрованное_сообщение = обычный_текст_сообщение.apply_shift(3) # печать (зашифрованное_сообщение) # cipher_msg = Зашифрованное сообщение (зашифрованное_сообщение) # decrypted_msg = cipher_msg.decrypt_message() # печать (расшифрованное_сообщение) если __name__ == '__main__': # # Пример теста (PlaintextMessage) # открытый текст = Простое текстовое сообщение('привет', 2) # print('Ожидаемый вывод: jgnnq') # print('Фактический вывод:', plaintext.get_message_text_encrypted()) # # #Пример теста (CiphertextMessage) # зашифрованный текст = зашифрованное сообщение('jgnnq') # print('Ожидаемый вывод:', (24, 'привет')) # print('Фактический вывод:', ciphertext.decrypt_message()) #TODO: НАПИШИТЕ СВОИ ТЕСТ-КЕЙСЫ ЗДЕСЬ #TODO: лучшее значение сдвига и незашифрованная история #Пример теста (PlaintextMessage) открытый текст = Простой текстСообщения('привет', 2) print('Ожидаемый вывод: jgnnq') print('Фактический вывод:', plaintext.get_message_text_encrypted()) #Пример теста (CiphertextMessage) зашифрованный текст = зашифрованное сообщение('jgnnq') print('Ожидаемый вывод:', (24, 'привет')) print('Фактический вывод:', ciphertext.
Об авторе