📝 Python

ord(), chr() и циклический сдвиг букв в Python 🔐

P
Автор
PyLand Team
📅
Опубликовано
09.08.2026
⏱️
Время чтения
3 мин
👁️
Просмотров
279
🌱
Уровень
Начальный

Строка состоит из символов, но компьютер хранит каждый символ как числовой код. Python позволяет переходить от символа к коду и обратно с помощью двух встроенных функций:

  • ord() — символ → число;
  • chr() — число → символ.

Эти функции пригодятся, когда символ нужно изменить по математическому правилу: например, сдвинуть букву на несколько позиций.

🔢 Как работает ord()

ord() принимает ровно один символ и возвращает его числовой код:

print(ord("A"))  # 65
print(ord("B"))  # 66
print(ord("a"))  # 97
print(ord(" "))  # 32

Заглавные и строчные буквы имеют разные коды. Поэтому диапазоны A–Z и a–z при преобразовании обычно обрабатывают отдельно.

Если передать строку длиннее одного символа, Python выдаст TypeError:

ord("AUTH")  # ошибка: нужен один символ

🔤 Как работает chr()

chr() выполняет обратное преобразование — принимает числовой код и возвращает символ:

print(chr(65))  # A
print(chr(66))  # B
print(chr(97))  # a

Функции можно соединить:

letter = "C"
code = ord(letter)
restored_letter = chr(code)

print(code)             # 67
print(restored_letter)  # C

➡️ Сдвиг одной буквы

Чтобы получить следующую заглавную букву, можно увеличить код на 1:

letter = "C"
shifted = chr(ord(letter) + 1)
print(shifted)  # D

Для сдвига на три позиции прибавляем 3:

letter = "C"
shift = 3
shifted = chr(ord(letter) + shift)
print(shifted)  # F

Но простое сложение ломается в конце алфавита: после Z находится уже не A. Значит, сдвиг должен быть циклическим.

🔄 Зачем нужен % 26

В английском алфавите 26 букв. Остаток от деления % 26 удерживает позицию в диапазоне от 0 до 25:

print(25 % 26)  # 25
print(26 % 26)  # 0
print(27 % 26)  # 1

После последней позиции мы снова оказываемся в начале. Поэтому Z со сдвигом 1 превращается в A.

Для заглавной буквы преобразование состоит из четырёх действий:

  1. вычесть код A и получить позицию 0–25;
  2. прибавить сдвиг;
  3. применить % 26;
  4. вернуть код A и преобразовать число через chr().
letter = "Z"
shift = 1
base = ord("A")

position = ord(letter) - base
new_position = (position + shift) % 26
shifted = chr(base + new_position)

print(shifted)  # A

Для строчных букв правило такое же, но базой становится ord("a").

✅ Как определить регистр

Символ можно проверить сравнением:

symbol = "G"

if "A" <= symbol <= "Z":
    print("Заглавная латинская буква")
elif "a" <= symbol <= "z":
    print("Строчная латинская буква")
else:
    print("Другой символ")

Пробелы, цифры и знаки препинания обычно оставляют без изменений.

🔐 Как из этого получается шифр Цезаря

Шифр Цезаря проходит по тексту и сдвигает каждую букву на одинаковое число позиций. Например, при сдвиге 3:

A → D
C → F
X → A

Общий маршрут обработки строки:

  1. создать пустую строку результата;
  2. перебрать исходный текст циклом for;
  3. определить тип текущего символа;
  4. сдвинуть заглавную или строчную букву относительно своей базы;
  5. остальные символы добавить без изменений;
  6. вернуть результат после завершения цикла.

Небольшая проверка преобразования одной буквы:

symbol = "X"
shift = 3
base = ord("A")
shifted = chr((ord(symbol) - base + shift) % 26 + base)

print(shifted)  # A

Для расшифровки используется то же правило с отрицательным сдвигом. Если текст зашифровали со сдвигом 3, восстановить его можно со сдвигом -3.

Шифр Цезаря подходит для изучения строк и алгоритмов, но не защищает настоящие пароли, токены и другие секретные данные.

⚠️ Частые ошибки

ord() получает целую строку

Обрабатывай текст циклом и передавай в ord() один текущий символ.

Один базовый код для двух регистров

Для A–Z используй ord("A"), для a–z — ord("a").

return находится внутри цикла

Тогда функция завершится после первой буквы. Возвращай результат после цикла.

Пробелы исчезают

Добавляй символ без изменений в ветке else.

🎯 Итог

  • ord(symbol) превращает один символ в число;
  • chr(code) превращает число обратно в символ;
  • % 26 зацикливает позицию внутри английского алфавита;
  • заглавные и строчные буквы обрабатываются относительно разных баз;
  • шифр Цезаря применяет одинаковый циклический сдвиг к каждой букве строки.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

if __name__ == "__main__": точка входа Python

Конструкция if name == "main" определяет точку входа Python-программы: она помогает отличить прямой запуск файла...

📅 14.08.2026 👁️ 217
📝

strip() и lower(): подготавливаем пользовательски…

Пользователь может ввести правильное слово с лишними пробелами или буквами другого регистра. Для Python строки...

📅 11.08.2026 👁️ 219
📝

Как функции работают вместе в Python 🧩

Небольшая функция обычно решает одну понятную задачу. Но настоящая программа состоит из нескольких задач: получить...

📅 09.08.2026 👁️ 208
🎓 Продолжить обучение

В каких курсах используется этот материал

Перейдите к курсу, чтобы закрепить материал на практике.

Python с нуля: 7 практических проектов Открыть программу курса