#python #string #loops #replace
#python #строка #циклы #заменить
Вопрос:
string = input()
for i in range(len(string)):
if i % 3 == 0:
final = string.replace(string[i], "")
print(final)
Мне задали вопрос: «Учитывая строку, удалите все ее символы, индексы которых делятся на 3».
Ответ для ввода
Python
такойyton
. Однако мой код выдаетPyton
.Код имеет смысл для меня, но я новичок. Любая помощь?
Комментарии:
1. (1) Вы используете одно и то же
string
в каждом цикле, поэтому вfinal
отражается только последнее изменение, и (2) Вам не следует использовать этот метод, поскольку он приведет к сбою, если строка содержит повторяющиеся символы (т. Е. Вы удалите всеh
символы, независимо от того, делятся индексы других на 3 или нет).2.
"".join(x for i, x in enumerate("Python") if i % 3 != 0)
Ответ №1:
Проблема в том, что во время выполнения цикла вы переопределяете final
переменную каждый раз, когда индекс делится на 3. Вместо этого попробуйте определить конечную переменную перед запуском цикла и добавляйте буквы по мере выполнения цикла над ними, и только тогда, когда их индекс НЕ делится на 3 (таким образом, игнорируя те, где индекс делится на 3).
Что-то вроде этого должно сработать:
string = input()
final = ""
for i in range(len(string)):
if i % 3 != 0:
final = string[i]
print(final)
Ответ №2:
В вашем текущем коде final
используется на каждой итерации цикла. Он продолжает обновление, заменяя один символ. На каждой итерации final
заменяется другой строкой с удаленной одной буквой из string
. После завершения цикла он эффективно заменяет только одну букву, которая в данном случае является «h».
Используйте это вместо (спасибо Матин Ульхак за идею):
print("".join(x for i, x in enumerate(input()) if i % 3 != 0))
Ответ №3:
string=input()
final=""
for i in range(len(string)):
if i % 3 != 0:
final =string[i]
print(final)
В вашем коде строка final = string.replace(string[i], "")
будет выполняться следующим образом.
Предположим, что ввод «hellobaby»:
i=0, final="ellobaby"
i=3, final="helobaby"
i=6, final="hellobby"