Преобразование регистра и проверки (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 работает с нелатинскими символами.