Потому, что replace НЕ меняет исходную строку, а ВОЗВРАЩАЕТ новую строку: s_1 = s_1.replace(s_1[-1], '') В целом же, проще использовать регулярные выражения и сначала удалять знаки препинания, а только потом разрезать строку на слова: import re
print(len(set(re.sub(r'[.,;:-?!]', '', input()).split())))
Удаление знаков препинания из строки в Питоне по другому делается...
Например так ==> from string import punctuation as p
s = 'Скажи-ка, дядя, ведь не даром, Москва спаленная пожаром, французу отдана?'
def f(x):
x = list(x)
for i in range(len(x)):
if x in p:
x = ''
return ''.join(x)
print(f(s))
Получим строку
"Скажика дядя ведь не даром Москва спаленная пожаром французу отдана"