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 шт):
В вашем примере вы почему-то и "вася пупкин" написали как "Вася Пупкин", что противоречит условию задачи. Поэтому эту вашу ошибку игнорируем. В остальном - задача решается следующим образом:
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)
Понятно, что скорее всего это решение будет не очень эффективным, но для тренировки алгоритмического мышления мне кажется интересным.