перевод первого символа слова в верхний регистр

Есть строка qWe zxc Vbn rty Uiop. Надо чтобы каждое слово начиналось с большой буквы. Сделал так

def change_register(my_str):
    s = ""
    for word in my_str.split():
        if word.istitle()== False:
            word = word[0].upper() + word[1:]
        s +="".join(word)
    return s

print(change_register('qwe zxc Vbn rty Uiop'))
#QWeZxcVbnRtyUiop

но на выходе получается сплошной текст, как слова можно разделить пробелами? Или может есть более красивое решение


Ответы (2 шт):

Автор решения: type49

Вот рабочий вариант вашей функции с учётом комментария насчёт нескольких больших букв.

def change_register(my_str):
    s = []
    for word in my_str.split(' '):
        if not word.istitle():
            word = word[0].upper() + word[1:].lower() #убрать .lower(), если не обязательно делать остальные буквы в слове маленькими. 
            s.append(word)
        else:
            s.append(word)
    return ' '.join(s)

print(change_register('qwe zXC Vbn rty Uiop'))

Вывод: Qwe Zxc Vbn Rty Uiop

→ Ссылка
Автор решения: MarianD
def change_register(my_str):
    return " ".join([word[0].upper() + word[1:] for word in my_str.split()])

Объяснение:

Читайте из конца:

  • my_str.split() сделает из строки список слов: ['qWe', 'zxc', 'Vbn', 'rty', 'Uiop'].

  • for word in переходит по каждом из этих слов.

  • word[0].upper() + word[1:] сделает первую букву очередного слова прописной.
  • всё это вместе с окружающими квадратными скобками ([]) делает из того генетратор списка, т.е. получаем список тех же слов, но уже с прописной первой буквой.
  • " ".join(...) всё это — т.е. полученный список с прописной первой буквой — используем как параметр метода .join() на строку с одним пробелом (" ") - результатом будет соединение всех элементов этого списка в одну строку, но с пробелами между ними.
→ Ссылка