перевод первого символа слова в верхний регистр
Есть строка 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()на строку с одним пробелом (" ") - результатом будет соединение всех элементов этого списка в одну строку, но с пробелами между ними.