📝 Python

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

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

Строка состоит из символов, но компьютер хранит каждый символ как числовой код. 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–zord("a").

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

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

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

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

🎯 Итог

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

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

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

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

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

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

🔗 Похожие

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

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

📝

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

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

📅 14.08.2026 👁️ 44
📝

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

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

📅 11.08.2026 👁️ 50
📝

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

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

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

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

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

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