← Назад к вопросам

Как перевести строку в нижнем регистре в строку с верхним регистром?

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 при работе с разными языками