Если i
равен нулю или единице, то i-2
будет отображаться на -2
и -1
соответственно.В Python -1
означает последний элемент.Так что он будет использовать заглавную букву E
, как вы заметили.
Возможно, имеет смысл начать с индекса 2
:
strin = "hello! there!"
strout = <b>list(strin[:2])</b>
for i in range(<b>2</b>, len(strin)):
if strin[i-2] == '!':
strout.append(strin[i].capitalize())
else:
strout.append(strin[i])
strout[0] = strout[0].capitalize()
result = ''.join(strout)
При этом использование регулярного выражения, вероятно,более декларативный здесь:
from re import compile as recompile
rgx = recompile(r'(?:[!]\s*|^)[a-z]')
outp = rgx.sub(lambda m: m.group(0).upper(), strin)
Это будет с заглавной буквы первого символа, а также все символы после восклицательного знака, независимо от количества пробелов между ними.