Использование str.replace для замены не алфавитно-цифровых символов звездочками в цикле for - PullRequest
1 голос
/ 08 октября 2019

Я пытаюсь переписать строки 5-8 только двумя строками, используя метод str.replace

s = 'pa55w-r@'
result = ''
for c in s:
    if(c not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'):
    result += '*'
else:
    result += c
print(result)

Ниже приведено то, что я получил до сих пор.

s = 'pa55w-r@'
result = ''
for c in s:
    if(c not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'):
        result = s.replace(c,"*")
print(result)

Однако, я не уверен, почему вывод

pa55w-r*

вместо

pa55w*r*

, который имеет исходный код? Я попытался сравнить с другим примером на Использование str.replace в цикле for , однако, предлагается добавить оператор else, который я фактически удалил, чтобы сжать код с 3 строк до 2. Любой вводбудет признателен

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

1 Ответ

2 голосов
/ 08 октября 2019

Проблема в том, что переменная result видит только один проход замены. Исправление состоит в том, чтобы последовательно назначать s , чтобы он становился все ближе и ближе к ожидаемому результату:

s = 'pa55w-r@'
for c in s:
    if(c not in 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'):
        s = s.replace(c,"*")
print(s)

Это приводит к:

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