Какой можно улучшить код использования шифра Виженера?

Как можно улучшить этот код для шифра Виженера с целью его сокращения и оптимизации?
  • 16 августа 2024 г. 16:03
Ответы на вопрос 2
Для улучшения кода шифра Виженера можно использовать функции для уменьшения повторяющегося кода и улучшения читаемости. Также можно оптимизировать код, убрав лишние переменные и улучшив структуру программы.

Пример улучшенного кода с использованием функций:

```python
def vigenere_cipher(text, key, decrypt=False):
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    key = key.upper()
    key_len = len(key)
    key_pos = 0
    result = ''

    for char in text:
        if char.upper() in alphabet:
            shift = alphabet.index(key[key_pos % key_len]) if not decrypt else -alphabet.index(key[key_pos % key_len])
            idx = (alphabet.index(char.upper()) + shift) % len(alphabet)
            result += alphabet[idx] if char.isupper() else alphabet[idx].lower()
            key_pos += 1
        else:
            result += char

    return result

text = 'Hello World'
key = 'KEY'

encrypted_text = vigenere_cipher(text, key)
print(encrypted_text)

decrypted_text = vigenere_cipher(encrypted_text, key, decrypt=True)
print(decrypted_text)
```

Этот код более компактный, использует функции для шифрования и расшифрования текста, и имеет лучшую организацию. Также можно добавить обработку ошибок и проверки ввода на корректность.
Если передать на вход действие не 1 и не 2, то все упадет с ошибкой, т.к. функция в словаре move не будет найдена. 

Использовать глобальные переменные это антипаттерн. Я про переменные key и a. Их можно было бы передать как параметры.

Для определения кода буквы можно использовать функцию ord и тогда не нужно будет пользоваться списком символов для вычисления индекса символа.
Похожие вопросы