Чтобы реализовать шифр Цезаря для русского и английского алфавитов, вам нужно учитывать, что количество букв в этих алфавитах отличается. В английском алфавите 26 букв, а в русском – 33 (если учитывать букву "ё").
Предлагаю доработанную версию вашего кода, которая может корректно шифровать текст с использованием как русского, так и английского алфавитов. Мы будем использовать отдельные функции для определения базового сдвига и количество букв в каждом алфавите, а также обрабатывать букву "ё" и заглавные буквы:
```python
def caesar_cipher(text, shift):
result = ""
# Определяем количество букв в алфавитах
ru_alphabet_size = 33
en_alphabet_size = 26
for char in text:
if char.isalpha(): # Проверка, является ли символ буквой
if 'а' <= char <= 'я': # Русские буквы
# Сдвиг для русского алфавита
shift_base = ord('а')
new_char = chr((ord(char) - shift_base + shift) % ru_alphabet_size + shift_base)
elif 'А' <= char <= 'Я': # Заглавные русские буквы
shift_base = ord('А')
new_char = chr((ord(char) - shift_base + shift) % ru_alphabet_size + shift_base)
elif 'a' <= char <= 'z': # Английские буквы
# Сдвиг для английского алфавита
shift_base = ord('a')
new_char = chr((ord(char) - shift_base + shift) % en_alphabet_size + shift_base)
elif 'A' <= char <= 'Z': # Заглавные английские буквы
shift_base = ord('A')
new_char = chr((ord(char) - shift_base + shift) % en_alphabet_size + shift_base)
else:
new_char = char # Оставляем небуквенные символы без изменений
result += new_char
else:
result += char # Оставляем небуквенные символы без изменений
return result
text = input("Введите текст для шифрования: ")
shift = int(input("Введите сдвиг: "))
encrypted_text = caesar_cipher(text, shift)
print("Зашифрованный текст:", encrypted_text)
```
### Объяснение кода:
1. **Определение базового сдвига:** Мы определяем базу для каждого алфавита в зависимости от того, является ли буква русской или английской.
2. **Сдвиг:** Сдвиг осуществляется по формуле `(ord(char) - shift_base + shift) % alphabet_size + shift_base`.
3. **Обработка небуквенных символов:** Все символы, которые не являются буквами (например, пробелы, знаки препинания), просто добавляются к результату без изменений.
4. **Корректная работа с буквами:** Это обеспечивает правильное шифрование для всех букв без исключений, включая заглавные и строчные.
Теперь ваш код будет работать корректно для ввода с обеими языками без временных решений.