Да, данный код можно оптимизировать с точки зрения производительности и удобства использования. Вот несколько возможных улучшений:
1. Вместо использования обычных списков для хранения символов алфавита и зашифрованной строки, можно воспользоваться модулем string и его константами ascii_lowercase и ascii_uppercase для создания алфавита. Это поможет упростить код и ускорить его выполнение.
2. Можно добавить проверку на ввод корректного значения сдвига. Например, можно установить ограничение на значения от -25 до 25 или выбрасывать исключение, если значение выходит за эти пределы.
3. Если на входе ожидается только строка без пробелов, можно вместо использования метода split() разбивать строку на символы с помощью list(). Это избавит от лишней операции и упростит код.
4. Вместо использования цикла можно воспользоваться методом translate() для замены символов строки с использованием созданного словаря. Это может быть более эффективным способом, особенно для больших строк.
5. Можно добавить возможность расшифровки строки, изменяя направление сдвига в обратную сторону.
Ниже приведен пример улучшенного кода с использованием указанных оптимизаций:
```python
from string import ascii_lowercase, ascii_uppercase
def caesar_cipher(message, shift, encrypt=True):
if not -25 <= shift <= 25:
raise ValueError("Shift value should be between -25 and 25.")
alphabet_lower = ascii_lowercase
alphabet_upper = ascii_uppercase
shifted_lower = alphabet_lower[shift:] + alphabet_lower[:shift]
shifted_upper = alphabet_upper[shift:] + alphabet_upper[:shift]
shifted_alphabet = shifted_lower + shifted_upper
translation_table = str.maketrans(alphabet_lower + alphabet_upper, shifted_alphabet)
if encrypt:
return message.translate(translation_table)
else:
return message.translate(str.maketrans(shifted_alphabet, alphabet_lower + alphabet_upper))
```
Теперь код более оптимизирован и удобен в использовании. Вызывая функцию `caesar_cipher(message, shift)`, где `message` - строка для шифрования или расшифрования, а `shift` - значение сдвига, вы получите результат.