Найти - Пользователи
Полная версия: Помогите решить (замена определенных символов в строке)
Начало » Python для новичков » Помогите решить (замена определенных символов в строке)
1
philips2009
Доброго времени суток!
Есть строка, в которой необходимо заменить (скрыть) определенные символы на “*”. Мне нужно, к примеру заменить 6-ой и 11-ый символы, но почему-то заменяется и ненужные символы.
Вот код:
 def hide_symbol(string):
    # 8, 11-15
    string_list = []
    for elem in string:
        if elem == string[6] or elem == string[11]:
            hidden_elem = '*'
            string_list.append(hidden_elem)
        else:
            string_list.append(elem)
    hidden_string = ''.join(string_list)
    return hidden_string
abc = 'DS3G54R3G5HDF3G1D31'
hidden_string = hide_symbol(abc)
print(hidden_string)

Просветите пожалуйста. Заранее благодарю.
marvellik
меняйте по индексам а не совпадающим символам
 def hide_symbol(string):
    # 8, 11-15
    string_list = list(string)
    for i,_ in enumerate(string_list):
        if i+1 in (8, 11,15):
            string_list[i] = '*'
    return ''.join(string_list)
abc = 'DS3G54R3G5HDF3G1D31'
hidden_string = hide_symbol(abc)
print(hidden_string)
rami
Строка кода:
 if elem == string[6] or elem == string[11]:
ищет все элементы равные string[6] (одна R) или равные string[11] (это уже три D) и заменяет их.

Правильно будет так:
 def hide_symbol(string):
    s = list(string)
    s[6] = '*'
    s[11] = '*'
    return ''.join(s)
AD0DE412
 def hide_symbol(strg, trgr, smbl):
    for i in trgr:
        out = ''
        count = 0
        for j in strg:
            if count == i - 1:
                out += smbl
                count = 0
            else:
                out += j
                count += 1
        strg = out
    return out
abc = 'DS3G54R3G5HDF3G1D31'
trgr = (6, 11)
smbl = '*'
print(hide_symbol(abc, trgr, smbl))
 DS3G5*R3G5**F3G1D*1
AD0DE412
rami
Правильно будет так:

 def hide_symbol(string):
    s = list(string)
    s[6] = '*'
    s[11] = '*'
    return ''.join(s)
тоже верно почему то показалось что каждый 6й и 11й символ
philips2009
Огромное спасибо всем, после объяснения вами понял в чем моя ошибка. Всех благ!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB