Как изменить регистр строки на прописные буквы в Python

Раздел: Основы Python -> Изменение регистра

Основы преобразования строк в верхний регистр

Как перевести все символы строки в заглавные буквы?

Основной и самый эффективный способ преобразования строки в верхний регистр в Python - использование метода str.upper(). Этот метод возвращает новую строку, в которой все буквенные символы исходной строки переведены в верхний регистр. Он поддерживает Unicode, поэтому корректно обрабатывает символы большинства языков, включая кириллицу.

text = "Привет, мир!"
result = text.upper()
print(result)  # ПРИВЕТ, МИР!

Python большие буквы (преобразование строки в верхний регистр в python)

ПРИВЕТ, МИР!

Python строчная буква (преобразование буквы в нижний регистр в python)

Типичные ошибки и их решение:

  • Проблема: метод upper() не изменяет исходную строку, а возвращает новую. Если забыть присвоить результат, исходная строка останется без изменений.
  • Решение: всегда сохранять результат в переменную, если требуется изменённое значение.
  • Проблема: для некоторых локалей (например, турецкий) стандартный upper() может дать неожиданный результат из-за разницы в правилах преобразования буквы 'i'.
  • Решение: использовать str.upper() с указанием локали через модуль locale или применять библиотеки для работы с текстом.

Как сделать заглавной только первую букву строки?

Метод capitalize() преобразует первый символ строки в верхний регистр, а остальные - в нижний. Полезен для форматирования предложений.

sentence = "приВЕТ, МИР!"
capitalized = sentence.capitalize()
print(capitalized)  # Привет, мир!
Привет, мир!

Особенность: метод сбрасывает регистр остальных символов в нижний, что может быть нежелательно для аббревиатур или имён собственных. Для таких случаев используют title() или собственное преобразование.

Как каждое слово в строке сделать с заглавной буквы?

Метод title() возвращает строку, в которой первая буква каждого слова становится заглавной, а остальные - строчными. Работает с учётом пробельных символов и знаков препинания.

text = "hello world! python rocks"
result = text.title()
print(result)  # Hello World! Python Rocks
Hello World! Python Rocks

Ошибка: title() может неправильно обработать слова с апострофами (например, "don't" станет "Don'T"). Для таких случаев рекомендуется использовать string.capwords() из модуля string.

Как инвертировать регистр символов в строке?

Метод swapcase() меняет все заглавные буквы на строчные и наоборот. Полезен при проверке паролей или работе с текстом в смешанном регистре.

mixed = "PyThOn Is FuN!"
swapped = mixed.swapcase()
print(swapped)  # pYtHoN iS fUn!
pYtHoN iS fUn!

Примечание: swapcase() не всегда даёт корректный результат для символов, не имеющих парного регистра (цифры, знаки препинания остаются без изменений).

Как применить преобразование к каждому символу вручную (через цикл или map)?

Иногда требуется нестандартная логика, например, перевести в верхний регистр только буквы определённого алфавита. Можно использовать встроенную функцию str.upper() в комбинации с map() или генератором списка.

text = "abc123def"
# Через map
result_map = ''.join(map(str.upper, text))
print(result_map)  # ABC123DEF

# Через list comprehension
result_list = ''.join([ch.upper() for ch in text])
print(result_list)  # ABC123DEF
ABC123DEF
ABC123DEF

Производительность: для коротких строк разница незначительна, но для длинных upper() быстрее, так как реализован на C.

Как работать с регистром в разных локалях (например, турецкий язык)?

Стандартный upper() не учитывает правила турецкого языка (буква i без точки становится İ, а точкастая i - i). Для корректного преобразования используется модуль locale или библиотека pyICU.

import locale
locale.setlocale(locale.LC_ALL, 'tr_TR.UTF-8')
turkish_word = "istanbul"
turkish_upper = turkish_word.upper()
print(turkish_upper)  # İSTANBUL (с точкой над İ)
İSTANBUL

Проблема: настройка локали может быть недоступна на некоторых платформах. В таких случаях рекомендуется использовать внешние библиотеки (например, pyICU).

Как преобразовать строку в верхний регистр с помощью ord/chr?

Для образовательных целей или при отсутствии методов можно воспользоваться таблицами ASCII/Unicode вручную. Пример для ASCII-букв:

def ascii_upper(s):
    result = []
    for ch in s:
        if 'a' <= ch <= 'z':
            result.append(chr(ord(ch) - 32))
        else:
            result.append(ch)
    return ''.join(result)

print(ascii_upper("Hello World!"))  # HELLO WORLD!
HELLO WORLD!

Ограничения: работает только с латинскими буквами. Для Unicode потребуется более сложная логика, поэтому предпочтительнее использовать встроенные методы.

Расширенные примеры преобразования регистра

Пример
# Пример 1: Преобразование строки с Unicode символами
# (русский, немецкий, французский)
text_unicode = "Привет, ça va? Über cool!"
upper_unicode = text_unicode.upper()
print(upper_unicode)
ПРИВЕТ, ÇA VA? ÜBER COOL!
Пример
# Пример 2: Использование .upper() со смешанными буквами и цифрами
text_mixed = "2024 Python Version 3.12"
print(text_mixed.upper())  # 2024 PYTHON VERSION 3.12
2024 PYTHON VERSION 3.12
Пример
# Пример 3: Применение .title() к тексту с апострофами
text_apostrophe = "i don't like it's"
print(text_apostrophe.title())  # I Don'T Like It'S (некорректно)
# Исправление с помощью string.capwords
import string
corrected = string.capwords(text_apostrophe)
print(corrected)  # I Don't Like It's
I Don'T Like It'S
I Don't Like It's
Пример
# Пример 4: Инвертирование регистра с учетом локали
locale_swapped = "Hello World! Привет!"
print(locale_swapped.swapcase())  # hELLO wORLD! пРИВЕТ!
hELLO wORLD! пРИВЕТ!
Пример
# Пример 5: Обходной путь для турецкого языка без локали
def turkish_upper(s):
    replacements = {'i': 'İ', 'ı': 'I', 'ş': 'Ş', 'ç': 'Ç', 'ğ': 'Ğ', 'ü': 'Ü', 'ö': 'Ö'}
    result = []
    for ch in s:
        lower = ch.lower()
        if lower in replacements:
            result.append(replacements[lower])
        else:
            result.append(ch.upper())
    return ''.join(result)

print(turkish_upper("istanbul ırmak şapka"))  # İSTANBUL IRMAK ŞAPKA
İSTANBUL IRMAK ŞAPKA
Пример
# Пример 6: Преобразование с помощью translate и maketrans
table = str.maketrans('abc', 'ABC')
text_trans = "abracadabra"
print(text_trans.translate(table))  # AbrAcAdAbrA
# Замечание: это неполное решение, так как символы не входящие в таблицу остаются без изменений
AbrAcAdAbrA
Пример
# Пример 7: Применение upper в list comprehension для фильтрации
words = ["python", "JAVA", "c++", "JavaScript"]
upper_words = [w.upper() for w in words if len(w) > 3]
print(upper_words)  # ['PYTHON', 'JAVA', 'JAVASCRIPT']
['PYTHON', 'JAVA', 'JAVASCRIPT']
Пример
# Пример 8: Использование .upper() для нормализации ввода пользователя
user_input = "  Hello   "
normalized = user_input.strip().upper()
print(f"'{normalized}'")  # 'HELLO'
'HELLO'
Пример
# Пример 9: Сравнение производительности (нанобенчмарк)
import timeit

text_long = "a" * 100000

# str.upper()
def test_upper():
    return text_long.upper()

# list comprehension
def test_listcomp():
    return ''.join([c.upper() for c in text_long])

# map
def test_map():
    return ''.join(map(str.upper, text_long))

print("upper:", timeit.timeit(test_upper, number=1000))
print("listcomp:", timeit.timeit(test_listcomp, number=1000))
print("map:", timeit.timeit(test_map, number=1000))
# Вывод (примерный): upper быстрее в 2-3 раза
upper: 0.023
listcomp: 0.091
map: 0.082
Пример
# Пример 10: Работа с многобайтовыми символами (эмодзи, иероглифы)
emoji_text = "Hello ? World!"
print(emoji_text.upper())  # HELLO ? WORLD! (эмодзи не меняются)
HELLO ? WORLD!

Преобразование строки в верхний регистр в Python - comments

En
Python большие буквы (python)