Python задача "Большие буквы"

Условия задачи, перевести первую букву каждого слова в верхний регистр

Суть вопроса в том, что при пошаговом воспроизведении кода, ошибок не наблюдается до момента replace на моменте lips вместо Lips возвращает lIps. В любых других случаях отрабатывает правильно. Вопрос, кто может объяснить почему реплейсится не правильное значение?

s = 'i wanna taste you but your lips are venomous poison'


def capitalize(z):
    t = z.split()
    print(t)
    for y in t:
        g = y[0].upper() + y[1:]
        z = z.replace(y, g)
    return z

print(capitalize(s))

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

Автор решения: Кирилл Малышев

У вас на первой итерации все i заменяются на I, а не только первое слово. Делайте так:

s = 'i wanna taste you but your lips are venomous poison'

def capitalize(z):
    t = z.split()
    for i in range(len(t)):
        g = t[i][0].upper() + t[i][1:]
        t[i] = g
    return ' '.join(t)

print(capitalize(s))

Или ещё проще:

s = 'i wanna taste you but your lips are venomous poison'

print(s.title())
→ Ссылка
Автор решения: Действительный Человек

У метода replace, есть ещё одно значение помимо заменяемого слова и нового слова. Это количество заменяемых слов string.replace(old, new[, maxcount]).

В вашем примере оно бесконечное, его необходимо заменить на одно: (word, g, 1)

→ Ссылка
Автор решения: Dmitry

Метод capitalize() уже существует у строк. Можно его использовать

def capitalize_first(z):
    result = [i.capitalize() for i in a.split()]
    return " ".join(result)

Вывод

>>> a = 'i wanna taste you, but your lips. are venomous poison'
>>> capitalize_first(a) 
'I Wanna Taste You, But Your Lips. Are Venomous Poison'
→ Ссылка