Использование наследования для добавления родительского класса к дочернему классу ⇐ Python
Использование наследования для добавления родительского класса к дочернему классу
У меня есть 2 класса, и я попытался добавить дочерний класс из родительского класса, чтобы преобразовать его в проценты от подсчета букв
Исходный класс:
класс TextAnalyzer: def __init__(self, текст): self._text = текст self._processed_text = "" self._all_letters = string.ascii_uppercase self._cleaned_letters = [] self._cleaned_letters_count = 0 self._individual_letter_counts = {} self._top_5_letter_counts = [] защита _preprocess_text(сам): self._cleaned_letters = список(фильтр(str.isalpha, self._text.upper())) self._cleaned_letters_count = len(self._cleaned_letters) self._individual_letter_counts = Collections.Counter(self._cleaned_letters) self._top_5_letter_counts = self._individual_letter_counts.most_common(5) self._processed_text = " ".join(self._cleaned_letters) защита анализ_текста (сам): self._preprocess_text() self._generate_report() Унаследованный класс для подсчета букв в тексте в процентах:
класс FrequencyAnalyzer(TextAnalyzer): def __init__(self, text, Frequency_data): супер().__init__(текст) self._ Frequency_data = {} линии = Frequency_data.split("\n") для строки в строках: символ, процент = line.strip().split(',') self._ Frequency_data [char] = float (процент) self._letter_percentages = {} # Храните здесь проценты букв self._inferred_cipher_key = Нет защита _calculate_letter_percentages(self): супер()._preprocess_text() total_letters = sum(self._individual_letter_counts.values()) sorted_letter_percentages = {} для письма в сортировке(self._individual_letter_counts.keys()): count = self._individual_letter_counts[буква] процент = (количество/общее_букв) * 100 sorted_letter_percentages[буква] = процент # Распечатываем проценты отсортированных букв # print("Частота букв (отсортировано по алфавиту):") # для буквы, процента в sorted_letter_percentages.items(): # print(f"{letter}: {percent:.3f}%") вернуть sorted_letter_percentages защита _generate_report(self): self._calculate_letter_percentages() print("Процентное соотношение букв:") для символа зашифрованный_процент в self._letter_percentages.items(): reference_percentage = self._ Frequency_data.get(char, 0) # Получите опорный процент для текущей буквы процент_разности = абс (зашифрованный_процент - эталонный_процент) print(f"{char}: Зашифровано: {encrypted_percentage:.2f}%, Ссылка: {reference_percentage:.2f}%, Разница: {percentage_difference:.2f}") print("Выведенный ключ шифрования:") для char, сдвиньте self._inferred_cipher_key.items(): print(f"{char}: {shift}") print("Процентное соотношение букв:") для символа, процент в self._letter_percentages.items(): print(f"{char}: {percentage:.2f}%") защита анализ_текста (сам): self._preprocess_text() self._generate_report()
Основная программа:
попыток = 0 пока попыток < 3: input_file_name = input("Пожалуйста, введите файл, который вы хотите проанализировать: ") если input_file_name.endswith('.txt') и os.path.exists(input_file_name): input_text = ManageFile.openFile(имя_входного_файла) если input_text равен None: print("Ошибка: невозможно прочитать файл.") попытки += 1 еще: перерыв еще: print("Неверное имя файла или файл не существует. Пожалуйста, укажите расширение ".txt".") попытки += 1 еще: print("Не удалось прочитать файл после трёх попыток. Возвращаемся в главное меню.") continue # Переход к следующей итерации цикла главного меню анализатор = TextAnalyzer(input_text) #print(анализатор) анализатор.analyze_text() #analyzer.perform_anaанализ() #input_text = Caesar.openFile(имя_входного_файла) os.system("pause") # Получаем "Нажмите любую клавишу, чтобы продолжить" Я хотел бы добиться наследования, используя preprocessing_text из родительского класса для подсчета букв, а затем добавить дочерний класс, преобразуя буквы в проценты, например
А,8,2 Б,1,5 С,2,8 Д,4,3 Е,12,7 Ф,2,2 Г,2,0 Н,6,1 я,7,0 Дж,0,15 К,0,77 Л,4,0 М,2,4 Н,6,7 О,7,5 П,1,9 Q,0,095 Р,6,0 С,6,3 Т,9,1 У,2,8 В,0,98 Вт, 2,4 Х,0,15 Д,2,0 Z,0,074
Ошибка:
Процентное соотношение букв: Предполагаемый ключ шифрования: Traceback (последний вызов последний): Файл «C:\Users\ASUS\Desktop\Data Structures\CA1\main.py», строка 259, в основной() Файл «C:\Users\ASUS\Desktop\Data Structures\CA1\main.py», строка 238, в главном анализатор.analyze_text() Файл «C:\Users\ASUS\Desktop\Data Structures\CA1\caesar.py», строка 422, в анализе_текста self._generate_report() Файл «C:\Users\ASUS\Desktop\Data Structures\CA1\caesar.py», строка 412, в _generate_report для char, сдвиньте self._inferred_cipher_key.items(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: объект «NoneType» не имеет атрибута «items». ** что за ошибка и, возможно, у меня неправильное форматирование наследования.**
Я думаю, что способ преобразования зашифрованного текста в буквы в проценты неправильный, поэтому я и получил
Выведенный ключ шифрования: А: 3 Б: 8 С: 0 Д: 3 Э: 7 Г: 2 Я: 0 Дж: 1 Л: 0 М: 8 О: 6 П: 5 Вопрос: 10 С: 0 Т: 3 У: 2 В: 5 В: 5 Х: 1 З: 4 Зашифрованный текст: «Beqvstm, beqvstm tqbbtm абиз, pwe Q ewvlmz epib gwc izm.
Cx ijwdm bpm asg aw pqop, tqsm и lqiuwvl qv bpm asg."
У меня есть 2 класса, и я попытался добавить дочерний класс из родительского класса, чтобы преобразовать его в проценты от подсчета букв
Исходный класс:
класс TextAnalyzer: def __init__(self, текст): self._text = текст self._processed_text = "" self._all_letters = string.ascii_uppercase self._cleaned_letters = [] self._cleaned_letters_count = 0 self._individual_letter_counts = {} self._top_5_letter_counts = [] защита _preprocess_text(сам): self._cleaned_letters = список(фильтр(str.isalpha, self._text.upper())) self._cleaned_letters_count = len(self._cleaned_letters) self._individual_letter_counts = Collections.Counter(self._cleaned_letters) self._top_5_letter_counts = self._individual_letter_counts.most_common(5) self._processed_text = " ".join(self._cleaned_letters) защита анализ_текста (сам): self._preprocess_text() self._generate_report() Унаследованный класс для подсчета букв в тексте в процентах:
класс FrequencyAnalyzer(TextAnalyzer): def __init__(self, text, Frequency_data): супер().__init__(текст) self._ Frequency_data = {} линии = Frequency_data.split("\n") для строки в строках: символ, процент = line.strip().split(',') self._ Frequency_data [char] = float (процент) self._letter_percentages = {} # Храните здесь проценты букв self._inferred_cipher_key = Нет защита _calculate_letter_percentages(self): супер()._preprocess_text() total_letters = sum(self._individual_letter_counts.values()) sorted_letter_percentages = {} для письма в сортировке(self._individual_letter_counts.keys()): count = self._individual_letter_counts[буква] процент = (количество/общее_букв) * 100 sorted_letter_percentages[буква] = процент # Распечатываем проценты отсортированных букв # print("Частота букв (отсортировано по алфавиту):") # для буквы, процента в sorted_letter_percentages.items(): # print(f"{letter}: {percent:.3f}%") вернуть sorted_letter_percentages защита _generate_report(self): self._calculate_letter_percentages() print("Процентное соотношение букв:") для символа зашифрованный_процент в self._letter_percentages.items(): reference_percentage = self._ Frequency_data.get(char, 0) # Получите опорный процент для текущей буквы процент_разности = абс (зашифрованный_процент - эталонный_процент) print(f"{char}: Зашифровано: {encrypted_percentage:.2f}%, Ссылка: {reference_percentage:.2f}%, Разница: {percentage_difference:.2f}") print("Выведенный ключ шифрования:") для char, сдвиньте self._inferred_cipher_key.items(): print(f"{char}: {shift}") print("Процентное соотношение букв:") для символа, процент в self._letter_percentages.items(): print(f"{char}: {percentage:.2f}%") защита анализ_текста (сам): self._preprocess_text() self._generate_report()
Основная программа:
попыток = 0 пока попыток < 3: input_file_name = input("Пожалуйста, введите файл, который вы хотите проанализировать: ") если input_file_name.endswith('.txt') и os.path.exists(input_file_name): input_text = ManageFile.openFile(имя_входного_файла) если input_text равен None: print("Ошибка: невозможно прочитать файл.") попытки += 1 еще: перерыв еще: print("Неверное имя файла или файл не существует. Пожалуйста, укажите расширение ".txt".") попытки += 1 еще: print("Не удалось прочитать файл после трёх попыток. Возвращаемся в главное меню.") continue # Переход к следующей итерации цикла главного меню анализатор = TextAnalyzer(input_text) #print(анализатор) анализатор.analyze_text() #analyzer.perform_anaанализ() #input_text = Caesar.openFile(имя_входного_файла) os.system("pause") # Получаем "Нажмите любую клавишу, чтобы продолжить" Я хотел бы добиться наследования, используя preprocessing_text из родительского класса для подсчета букв, а затем добавить дочерний класс, преобразуя буквы в проценты, например
А,8,2 Б,1,5 С,2,8 Д,4,3 Е,12,7 Ф,2,2 Г,2,0 Н,6,1 я,7,0 Дж,0,15 К,0,77 Л,4,0 М,2,4 Н,6,7 О,7,5 П,1,9 Q,0,095 Р,6,0 С,6,3 Т,9,1 У,2,8 В,0,98 Вт, 2,4 Х,0,15 Д,2,0 Z,0,074
Ошибка:
Процентное соотношение букв: Предполагаемый ключ шифрования: Traceback (последний вызов последний): Файл «C:\Users\ASUS\Desktop\Data Structures\CA1\main.py», строка 259, в основной() Файл «C:\Users\ASUS\Desktop\Data Structures\CA1\main.py», строка 238, в главном анализатор.analyze_text() Файл «C:\Users\ASUS\Desktop\Data Structures\CA1\caesar.py», строка 422, в анализе_текста self._generate_report() Файл «C:\Users\ASUS\Desktop\Data Structures\CA1\caesar.py», строка 412, в _generate_report для char, сдвиньте self._inferred_cipher_key.items(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: объект «NoneType» не имеет атрибута «items». ** что за ошибка и, возможно, у меня неправильное форматирование наследования.**
Я думаю, что способ преобразования зашифрованного текста в буквы в проценты неправильный, поэтому я и получил
Выведенный ключ шифрования: А: 3 Б: 8 С: 0 Д: 3 Э: 7 Г: 2 Я: 0 Дж: 1 Л: 0 М: 8 О: 6 П: 5 Вопрос: 10 С: 0 Т: 3 У: 2 В: 5 В: 5 Х: 1 З: 4 Зашифрованный текст: «Beqvstm, beqvstm tqbbtm абиз, pwe Q ewvlmz epib gwc izm.
Cx ijwdm bpm asg aw pqop, tqsm и lqiuwvl qv bpm asg."
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Принадлежит ли сокет, созданный в родительском классе, его дочернему классу?
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-