← Назад к вопросам
Как перевести строку в нижнем регистре в строку с верхним регистром?
1.0 Junior🔥 181 комментариев
#Python Core#Soft Skills
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как перевести строку в нижнем регистре в строку с верхним регистром
Это базовая операция со строками, но есть несколько способов и важные нюансы, особенно при работе с Unicode и разными локалями.
1. Основной способ: метод upper()
# Самый простой и быстрый способ
text = "hello world"
uppercase = text.upper()
print(uppercase) # HELLO WORLD
# Работает с Unicode
text_unicode = "привет мир"
uppercase_unicode = text_unicode.upper()
print(uppercase_unicode) # ПРИВЕТ МИР
2. Метод lower()
Для обратного преобразования:
text = "HELLO WORLD"
lowercase = text.lower()
print(lowercase) # hello world
# Для любых символов
text_mixed = "HeLLo WoRLD"
print(text_mixed.lower()) # hello world
3. Методы преобразования регистра
text = "hello world"
# upper() — все заглавные
print(text.upper()) # HELLO WORLD
# lower() — все строчные
print(text.lower()) # hello world
# capitalize() — первая буква заглавная
print(text.capitalize()) # Hello world
# title() — каждое слово с заглавной
print(text.title()) # Hello World
# swapcase() — поменять регистр
text_mixed = "Hello WORLD"
print(text_mixed.swapcase()) # hELLO world
# casefold() — для строгого сравнения без учёта регистра
print(text.casefold()) # hello world
4. Сравнение без учёта регистра
# ❌ Неправильно: учитывает регистр
if "Hello" == "hello": # False
print("Equal")
# ✅ Правильно: сравниваем в одном регистре
if "Hello".upper() == "hello".upper(): # True
print("Equal")
# ✅ Или используем lower()
if "Hello".lower() == "hello".lower(): # True
print("Equal")
# ✅ Для строгого сравнения используй casefold()
if "ß".casefold() == "ss".casefold(): # True (нем. eszett)
print("Equal")
5. Работа с Unicode и локалями
Внимание с нетривиальными символами:
# Турецкий язык имеет особую букву 'ı' (маленькая без точки)
text_tr = "İstanbul"
print(text_tr.lower()) # istanbul (может отличаться по локали)
# Немецкий: eszett ß
text_de = "Straße"
print(text_de.upper()) # STRASSE (ß → SS)
print(text_de.casefold()) # strasse
# Греческий
text_el = "Ελληνικά"
print(text_el.upper()) # ΕΛΛΗΝΙΚΆ
print(text_el.lower()) # ελληνικά
6. Условное преобразование
# Преобразовать только если строка уже в верхнем регистре
text = "HELLO"
if text.isupper():
print(text.lower()) # hello
# Проверить регистр
text1 = "HELLO"
text2 = "hello"
text3 = "Hello"
print(text1.isupper()) # True
print(text2.islower()) # True
print(text3.islower()) # False
print(text3.isupper()) # False
# Проверить, содержит ли букв вообще
print("123".isalpha()) # False
print("abc".isalpha()) # True
7. Преобразование в строке или списке
# List comprehension для списка строк
words = ["hello", "world", "python"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words) # ['HELLO', 'WORLD', 'PYTHON']
# map() для функциональной обработки
uppercase_words = list(map(str.upper, words))
print(uppercase_words) # ['HELLO', 'WORLD', 'PYTHON']
# Замена в строке
text = "Hello World"
replaced = text.replace("Hello", "HELLO")
print(replaced) # HELLO World
8. Регулярные выражения для сложных случаев
import re
text = "hello world"
# Заменить первую букву каждого слова на заглавную
result = re.sub(r'\b(\w)', lambda m: m.group(1).upper(), text)
print(result) # Hello World
# Заменить все строчные буквы на заглавные (как upper())
result = re.sub(r'[a-z]', lambda m: m.group(0).upper(), text)
print(result) # HELLO WORLD
# Более сложный пример: заглавная только для гласных
result = re.sub(r'[aeiou]', lambda m: m.group(0).upper(), text)
print(result) # hEllO wOrld
9. Производительность
import timeit
text = "hello world" * 1000
# Способ 1: встроенный upper()
def method1():
return text.upper()
# Способ 2: map со str.upper
def method2():
return "".join(map(str.upper, text))
# Способ 3: list comprehension
def method3():
return "".join([c.upper() for c in text])
print(timeit.timeit(method1, number=10000)) # 0.001 сек
print(timeit.timeit(method2, number=10000)) # 0.1 сек
print(timeit.timeit(method3, number=10000)) # 0.15 сек
# Встроенный upper() в 100 раз быстрее!
10. Практические примеры
Нормализация пользовательского ввода:
def normalize_username(username: str) -> str:
"""Нормализует имя пользователя: нижний регистр, без пробелов."""
return username.lower().strip()
print(normalize_username(" John Doe ")) # john doe
Проверка пароля:
def validate_password(password: str) -> bool:
"""Проверяет, содержит ли пароль буквы разных регистров."""
return any(c.isupper() for c in password) and any(c.islower() for c in password)
print(validate_password("Password123")) # True
print(validate_password("password123")) # False
Форматирование названий колонок:
def format_column_name(name: str) -> str:
"""Преобразует строку в snake_case."""
import re
# Каждой заглавной букве предшествует подчёркивание
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name)
return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower()
print(format_column_name("firstName")) # first_name
print(format_column_name("UserID")) # user_id
Вывод
- Используй upper() для преобразования в верхний регистр
- Используй lower() для нижнего регистра
- Для сравнения без учёта регистра — нормализуй оба значения
- casefold() для строгого Unicode сравнения
- Встроенные методы быстрее любых альтернатив
- Помни про нюансы Unicode при работе с разными языками