Преобразование регистра и проверки (isdigit, startswith)

Преобразование регистра и проверки (isdigit, startswith)

Python предоставляет богатый набор методов для работы с регистром строк и проверки их содержимого. Эти методы особенно полезны при обработке пользовательского ввода, парсинге текста и валидации данных.

Методы изменения регистра

s = "Hello, World! Python Rules."

print(s.upper())       # HELLO, WORLD! PYTHON RULES.
print(s.lower())       # hello, world! python rules.
print(s.title())       # Hello, World! Python Rules. (заглавная каждого слова)
print(s.capitalize())  # Hello, world! python rules. (заглавная только первого)
print(s.swapcase())    # hELLO, wORLD! pYTHON rULES.

Методы не изменяют исходную строку — возвращают новую.

Практическое применение регистра

Сравнение без учёта регистра:

user_input = "PYTHON"
expected = "python"

# Ненадёжно:
print(user_input == expected)          # False

# Правильно:
print(user_input.lower() == expected)  # True
print(user_input.casefold() == expected)  # True (лучше для Unicode)

casefold() — более агрессивная версия lower(), которая правильно обрабатывает специальные символы Unicode. Например, немецкая ß превращается в ss.

Нормализация ввода:

city = input("Город: ").strip().title()   # убираем пробелы, приводим к Title Case
print(f"Вы ввели: {city}")

Методы проверки: is-методы

Python предоставляет целое семейство методов is*, которые возвращают True или False:

s1 = "12345"
s2 = "Hello"
s3 = "Hello World"
s4 = "  "

# Проверка содержимого:
print(s1.isdigit())     # True — только цифры
print(s2.isdigit())     # False

print(s2.isalpha())     # True — только буквы
print(s3.isalpha())     # False — есть пробел

print(s3.isalnum())     # False — есть пробел
print("hello123".isalnum())  # True — буквы и/или цифры

print(s4.isspace())     # True — только пробельные символы
print("".isspace())     # False — пустая строка

# Проверка регистра:
print("HELLO".isupper())    # True
print("hello".islower())    # True
print("Hello World".istitle())  # True
print("Hello world".istitle())  # False — 'world' с маленькой

Полезная сводка is-методов

МетодВозвращает True если
isdigit()все символы — цифры (0-9)
isalpha()все символы — буквы
isalnum()все символы — буквы или цифры
isspace()все символы — пробельные
isupper()все буквенные символы в верхнем регистре
islower()все буквенные символы в нижнем регистре
istitle()строка в «Стиле Заголовка»
isidentifier()строка — допустимый Python-идентификатор
isprintable()все символы — печатаемые

isdigit vs isnumeric vs isdecimal

Три похожих метода с тонкими отличиями:

print("123".isdigit())    # True
print("²³".isdigit())     # True — надстрочные цифры тоже True
print("½".isdigit())      # False

print("½".isnumeric())    # True — дробные числа
print("²".isnumeric())    # True

print("123".isdecimal())  # True
print("²".isdecimal())    # False — только 0-9

Для проверки «можно ли преобразовать в int» — используйте isdecimal() или лучше try/except int().

startswith и endswith с кортежем

Метод startswith(prefix) принимает одну строку или кортеж вариантов:

filename = "report_2025.pdf"

# Проверить несколько расширений:
print(filename.endswith((".pdf", ".docx", ".xlsx")))   # True

urls = ["https://example.com", "http://test.org", "ftp://files.net"]
secure = [url for url in urls if url.startswith("https")]
print(secure)   # ['https://example.com']

Практический пример: валидация ввода

def validate_age(text):
    """Проверяет, что текст — допустимый возраст (число 0-120)."""
    text = text.strip()
    if not text.isdecimal():
        return None, "Возраст должен быть числом"
    age = int(text)
    if not 0 <= age <= 120:
        return None, "Возраст должен быть от 0 до 120"
    return age, None

age, error = validate_age("  25  ")
if error:
    print(f"Ошибка: {error}")
else:
    print(f"Возраст: {age}")

Метод center, ljust, rjust

Дополнение строки символами до заданной ширины:

s = "hello"

print(s.center(11))         # '   hello   ' — по центру с пробелами
print(s.center(11, "*"))    # '***hello***' — по центру со звёздочками
print(s.ljust(10, "."))     # 'hello.....' — слева, заполнить точками
print(s.rjust(10, "0"))     # '00000hello' — справа, заполнить нулями

То же через f-строки:

print(f"{'hello':*^11}")   # ***hello***
print(f"{'hello':.<10}")   # hello.....

Проверь себя

Что вернут следующие выражения?

print("Hello123".isalnum())
print("Hello 123".isalnum())
print("HELLO".islower())
print("hello".lower() == "HELLO".lower())
  • "Hello123".isalnum()True (буквы и цифры)
  • "Hello 123".isalnum()False (есть пробел)
  • "HELLO".islower()False
  • "hello".lower() == "HELLO".lower()True (оба "hello")

Итог

  • upper(), lower(), title(), capitalize(), swapcase() — изменение регистра.
  • casefold() — более надёжный lower() для Unicode.
  • isdigit(), isalpha(), isalnum(), isspace(), isupper(), islower() — проверка содержимого.
  • startswith(), endswith() принимают кортежи — удобно для проверки нескольких вариантов.
  • center(), ljust(), rjust() — выравнивание строки с заполнителем.
  • Все методы возвращают новые строки или bool; исходная строка не изменяется.

В следующем уроке сделаем краткое введение в кодировки и Unicode — чтобы понять, как Python работает с нелатинскими символами.

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике