Здравствуйте, уважаемые друзья. Я написал код для нахождения ключа в Шифре Виженера, но возникла следующая ошибка: <br/><blockquote> a = (text_char_code[i] - chiper_char_code[i]) % len(alpha1)<br/> ~~~~~~~~~~~~~~^^^<br/> TypeError: 'int' object is not subscriptable </blockquote> <br/> Я попробовал несколько вариантов с изменением типа переменной, но, к сожалению, это не помогло. Подскажите, пожалуйста, как разрешить эту проблему. Вот мой исходный код: <br/><pre><code class="python">alpha1 = list('абвгдеёжзийклмнопрстуфхцчшщъыьэюя') text = 'имитостойкость' cipher_text = 'щхыяяъеыъубюге' key = " " def get_key(text_char: str, i, cipher_char: str, alpha: list[str]) -> str: if text_char not in alpha1: # Находит незнакомый символ и оставляет как есть return text_char text_char_code = alpha1.index(text_char) # Находит символ открытого текста chiper_char_code = alpha1.index(cipher_char) # Находит символ зашифрованного текста for i in text_char: global a a = (text_char_code[i] - chiper_char_code[i]) % len(alpha1) # Находит ключ for i in range(len(text)): key = key + str(get_key(text[i], i, cipher_text[i], alpha= alpha1)) #сохраняет ключ print(key)</code></pre>
Ошибка `TypeError: 'int' object is not subscriptable` возникает, потому что вы пытаетесь использовать индексацию в переменной `text_char_code`, которая является целым числом (тип `int`). Зачем вы пытаетесь использовать `i` для индексации? В данной ситуации `text_char_code` и `chiper_char_code` являются индексами символов в алфавите, и нет необходимости делать из них списки. Вместо этого вам нужно просто использовать их как целые числа. Кроме того, в вашем коде есть некоторые другие моменты, которые стоит исправить: 1. Вызывать `get_key` с соответствующими параметрами. 2. Обновить логику получения ключа. Вот исправленный код: ```python alpha1 = list('абвгдеёжзийклмнопрстуфхцчшщъыьэюя') text = 'имитостойкость' cipher_text = 'щхыяяъеыъубюге' key = "" def get_key(text_char: str, cipher_char: str, alpha: list[str]) -> str: if text_char not in alpha: # Находит незнакомый символ и оставляет как есть return text_char text_char_code = alpha.index(text_char) # Находит символ открытого текста chiper_char_code = alpha.index(cipher_char) # Находит символ зашифрованного текста a = (text_char_code - chiper_char_code) % len(alpha) # Находит ключ return alpha[a] # Возвращает символ ключа for i in range(len(text)): key += str(get_key(text[i], cipher_text[i], alpha=alpha1)) # сохраняет ключ print(key) ``` Изменения и пояснения: - В функции `get_key` теперь не используется индекс `i`, потому что `text_char_code` и `chiper_char_code` уже являются индексами символов. Вместо этого используется простое вычитание. - Возвращается символ, соответствующий вычисленному индексу `a`. - Вместо `global a` определение `a` теперь локально в функции. Это более читаемо и правильно. - В итоге `key` формируется правильно. Теперь ваш код должен работать без ошибок и возвращать ожидаемый результат.
Учись отладке, сделай перед строкой с ошибкой print(text_char_code)
и помедитируй над выводом. Ну текст ошибки достаточно ясно описывает проблему, просто переведи его