s.replace строковый метод, проходящий через строку - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь написать метод, который заменяет каждое вхождение буквы после первого на «*» вместо буквы.Примеры: "babble" возвращает "ba ** le" ", что" возвращает "tha *"

Мой код, похоже, имеет проблему с функцией замены во время цикла, и я не могу понять, почему.

def fix_start(s):
    if len(s) < 2:
        s = "" 
    else:
        for i in s:
            if i == s[0]:
                if s[0]:
                    continue
                s.replace(s[i], "*")
                i += i
    print(s)

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Метод str.replace возвращает копию исходной строки с заменой всех вхождений данной подстроки на заданную новую строку, поэтому вы можете просто вырезать входную строку из второго символа и заменить все вхождения первого символа на'*' и объединить его после первого символа оригинальной строки:

def fix_start(s):
    return s[0] + s[1:].replace(s[0], '*')

, чтобы fix_start('babble') вернул: 'ba**le'

0 голосов
/ 24 сентября 2019

Для более обобщенной версии метода blhsing, где заменяемый символ не обязательно должен быть первым символом в строке:

def replaceFirst(string, letter):
    before_first_occurrence = string[:string.find(letter)+1]
    after_first_occurrence = string[string.find(letter)+1:]
    print(before_first_occurrence, after_first_occurrence)
    return before_first_occurrence + after_first_occurrence.replace(letter, '*')


print(replaceFirst("daringinglyiiii", "i"))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...