Python. В строке после каждого знака окончания предложения начать часть оставшейся сроки с большой буквы. Как?

Всем привет. Есть такая задачка, помогите пожалуйста решить, реально столько времени убил на нее...

Клиент вводит текст маленькими буквами: добрый день. меня зовут вася пупкин. когда вы открываетесь?

  def main():
    
    string = input('Введите предложение: ')
    
    print(modify(string))
    
def modify(s):
    newstr = s[0].upper() + s[1:s.index('!')+ 2] + s[s.index('!')+ 2].upper() \
             + s[s.index('!')+ 3:s.index('?')+ 2] + s[s.index('?')+ 2].upper() \
             + s[s.index('?')+ 3:]
    return newstr
        
main()

и результат решения должен быть таким, что первые буквы начала предложения и имени должны быть большими: Добрый день. Меня зовут Вася Пупкин. Когда вы открываетесь?


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

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

В вашем примере вы почему-то и "вася пупкин" написали как "Вася Пупкин", что противоречит условию задачи. Поэтому эту вашу ошибку игнорируем. В остальном - задача решается следующим образом:

import re
string = "добрый день. меня зовут вася пупкин. когда вы открываетесь? так или не так."
opt=''
for s in re.split(r'(?<=[.!?]) ', string):   
    opt=opt+s.capitalize()+' '
print (opt)

Результат:

Добрый день. Меня зовут вася пупкин. Когда вы открываетесь? Так или не так. 

Озадачился вопросом - а вдруг ТС еще не учил регулярные выражения. Можно-ли переписать это задание исключительно на встроенных функциях Python? Ничего подобного при беглом просмотре в интернет не нашел, поєтому привожу свое решение:

string = "добрый день. меня зовут вася пупкин. когда вы открываетесь? так или не так."
lst=list(string)
for i in range (len(string)):
    if i == 0: 
        lst[i]=lst[i].upper()
    else:
        if (i<=len(string)-2)and ((lst[i]=='?' or lst[i]=='.' or lst[i]=='!') and (lst[i+1]==' ')):
            lst[i+2]=lst[i+2].upper()
opt=''.join(lst)
print (opt) 

Понятно, что скорее всего это решение будет не очень эффективным, но для тренировки алгоритмического мышления мне кажется интересным.

→ Ссылка