Почему не работает это решение ? (строки)
На вход программе подается строка текста, в которой буква «h» встречается минимум два раза. Напишите программу, которая удаляет из этой строки первое и последнее вхождение буквы «h»,
а также все символы, находящиеся между ними.
Я знаю, что можно решить с помощью срезов, но мне интересно, почему это решение не робит:
s=input()
gate1=s.find('h')
gate2=s.rfind('h')
for i in range (gate1,gate2+1):
s=s[:i]+''+s[i+1:]
print(s)
Потому, что ты удаляешь совсем не то, что требуется. Ведь gate1 и gate2 - это позиции в ИСХОДНОЙ строке. А ты строку в цикле каждый раз меняешь и позиции символов в ней меняются. Если так хочешь удалять в цикле по одному символу, то:
for _ in range (gate1, gate2 + 1):
s = s[:gate1] + s[gate1 + 1:]
Но намного лучше - одной операцией, как сделано в соседнем отевете.
s = input()
gate1 = s.find('h')
gate2 = s.rfind('h')
s = s[:gate1] + s[gate2+1:]
print(s)
Это решение не работает, потому что в цикле for вы изменяете длину строки s, удаляя символы из нее. Это приводит к тому, что индекс i больше не указывает на правильную позицию в строке. Вместо этого, вы можете создать новую строку и добавлять в нее символы из исходной строки, которые необходимо сохранить. Например:
s = input()
gate1 = s.find('h')
gate2 = s.rfind('h')
new_s = s[:gate1] + s[gate2+1:]
print(new_s)
В этом решении мы создаем новую строку new_s, которая содержит символы из исходной строки до первого вхождения буквы «h» и после последнего вхождения буквы «h». Затем мы выводим новую строку на экран. Это решение работает правильно и удаляет из строки первое и последнее вхождение буквы «h», а также все символы, находящиеся между ними.