Необходимо написать функцию, заменяющую все символы(кроме последних четырех) на знак решетки "#"
Проблема заключается в том, что поставленная задача выполняется не корректно. То есть заменяются всего пара букв во всём предложении. При чём я не совсем понимаю с чем это связано, т.к. при изменении среза, меняются разные буквы.
Подскажите, пожалуйста, где допускается ошибка в логике?
def maskify(cc):
for i in cc[:-4]:
arr = cc.replace(i, '#')
cc = ''.join(arr)
return cc
password = 'Hello everyone'
maskify(password)
Ответы (2 шт):
Нет необходимости работать с заменами, по нескольким причинам (зачем нам ненужные и лишние движения). Многие забывают, что строка - это неизменяемый тип данных и при вызове replace исходная строка не меняется, ее надо сохранять в другое место или перезаписывать уже существующее значение. Все, что вам нужно это длина строки и все. Функция будет такой
def maskify(cc):
grid_len = len(cc) - 4
return "#" * grid_len + cc[-4:]
Сначала считаю сколько решеток мне надо, затем умножаю строку с решеткой на это количество, а дальше подставляю последний четыре символа из самой строки. Все
>>> maskify("Hello WORLD")
'#######ORLD'
>>> maskify("Hello everyone")
'##########yone'
Напишите только обработку на строку меньше четырех символов
Ошибки в логике здесь:
for i in cc[:-4]:
arr = cc.replace(i, '#')
При каждой итерации arr затирается новым значением и в самом конце заменена только пятая с конца буква (и все остальные такие же). Добавь print(arr) и поймёшь, что именно происходит.
for i in cc[:-4]:
arr = cc.replace(i, '#')
print(arr)
И вообще привыкай выводить на печать значения переменных, когда ищешь ошибки.