Как я могу перебрать строку и удалить символ один за другим - PullRequest
0 голосов
/ 18 февраля 2020

Число и слово предоставляются. Например:

value = 3
word = 'NAME'

Мне нужно l oop через слово NAME, удалять по одной букве за раз и, наконец, отображать последнюю оставшуюся букву. Шаблон удаления: начиная с первой буквы, продвигаясь по value буквам в цикле (после достижения конца, начиная с индекса 0) и удаляя достигнутую букву.

Например, если значение это 3. Он будет считать 3, начиная с N и удаляя сначала M.

Остальное - NAE - считать до 3 от следующей буквы, которая теперь E, затем A будет удален.

Осталось NE - считать до 3, начиная с E, затем E будет удалено и останется только N. Результат будет показан N. Я не могу найти способ построить все oop, чтобы сделать эту итерацию.

На данный момент я сделал вручную и сделал это как

if value == 4:
  print('A')
elif value == 1:
  print('E')
elif value ==2:
  print('N')

Это не практично, так как значение будет что-то между 1-100. Любое другое решение, при котором это будет автоматически повторяться, удаляться и показывать мне последнее письмо.

1 Ответ

0 голосов
/ 21 февраля 2020

Вы не можете «удалить» символы из строки, так как строки неизменяемы. То, что вы можете сделать, это переназначить с измененной строкой.

Что касается цикла, вы можете использовать оператор % (модуль) для эффекта cycli c. Прежде всего вам нужно будет пометить первый индекс для подсчета на каждой итерации:

start = 0

Затем мы продолжим итерацию, пока у нас не останется одна буква:

while len(word) > 1:

Теперь мы хотим найти индекс следующей буквы, которая будет удалена. Как я уже сказал, с использованием % мы вернемся к 0 после последней буквы:

    to_remove = (start + value - 1) % len(word)

Теперь нам нужно фактически удалить найденное письмо, как я объяснил, у нас будет переназначить переменную, и мы избавимся от буквы, используя нарезку:

    word = word[:to_remove] + word[to_remove+1:]

Все вместе у нас получится что-то вроде:

def remove_letters(word, value):
    start = 0
    while len(word) > 1:
        to_remove = (start + value - 1) % len(word)
        start = to_remove
        word = word[:to_remove] + word[to_remove+1:]
    return word

Несколько примеров:

>>> remove_letters('NAME', 3)
'N'
>>> remove_letters('NAME', 4)
'A'
>>> remove_letters('NAME', 5)
'A'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...