Преобразовать строку-предложение так, чтобы каждое слово начиналось с заглавной буквы, НЕ ИСПОЛЬЗУЯ TITLE(ВАЖНО)

Дана строка-предложение на английском языке. Преобразовать строку так, чтобы каждое слово начиналось с заглавной буквы. При этом желательно не использовать title(не спрашивайте, почему)

a = input("Введите строку-предложение на английском языке: ")
c = a[0]
s = c.upper()
for i in range(1, len(a)):
    if a[i] == " ":
        s = s + a[i]
        v = a[i+1]
        n = v.upper()
        s = s + n
    else:
        s = s + a[i]
print(s)

В итоге при вводе: "My name is" у меня получается "My Nname Iis". Как мне избавиться от повторяющихся букв?


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

Автор решения: Эникейщик

Чуток подправить индексы

if a[i-1] == " ": # <---
    s = s + " "
    v = a[i]      # <---
    n = v.upper()
    s = s + n
→ Ссылка
Автор решения: Alexey Trukhanov
  1. Понижаем регистр всех букв (это на тот случай если ввод будет содержать и заглавные буквы, можно не делать, если гарантировано, что ввод будет только строчный) - .lower
  2. Разбиваем строку на список слов - .split
  3. В каждом слове поднимаем первую букву - .upper
  4. Обратно собираем список слов в строку - .join
a = input("Введите строку-предложение на английском языке: ")
s = " ".join([s[0].upper() + s[1:] for s in a.lower().split()])
print(s)

Но если очень хочется перебрать все буквы, можно, например, так:

a = input("Введите строку-предложение на английском языке: ")
s = a[0].upper()
f = False
for i in range(1, len(a)):
    if f:
        s = s + a[i].upper()
        f = False
    else:
        s = s + a[i]
    if a[i] == " ":
        f = True
print(s)
→ Ссылка
Автор решения: Алексей Р

С перебором символов немного покороче и без индексов:

a = 'moTHeR washed RamA '  # input("Введите строку-предложение на английском языке: ")
out, pred = '', ' '
for c in a:
    out += c.upper() if pred == ' ' else c.lower()
    pred = c
print(out)
Mother Washed Rama 
→ Ссылка