2016-09-28 2 views
1

Мне нужно преобразовать строку word, где каждый символ, который появляется только один раз, должен появиться как '(' в новой строке. Любые повторяющиеся символы в исходной строке должны быть заменены на ')'.Заменить повторяющиеся строковые символы

Мой код ниже ...

def duplicate_encode(word): 
new_word = '' 
for char in word: 
    if len(char) > 1: 
     new_word += ')' 
    else: 
     new_word += '(' 
return new_word 

Тест я не проходит следующим образом:

'((((((' должна равняться '()()()'

Это говорит о том, что, если, например, вход «отступит,» выход должен прочитать ()()().

+0

Если тест таким образом, что " ((((('должен превратиться в'()()() ', что вы должны пытаться сделать для каждого символа, превратите его в' ('кроме того, если символ идентичен одному p отступая от него, и в этом случае его следует превратить в «)». «Recede», как и большинство английских слов, останется неизменным. –

ответ

0

Похоже, ваш результат основан на количестве вхождений символа в слове , Вы можете использовать Counter отслеживать, что:

def duplicate_encode(word): 
    from collections import Counter 

    word = word.lower()    # to disregard case 
    counter = Counter(word) 
    new_word = '' 
    for char in word: 
     if counter[char] > 1:  # if the character appears more than once in the word 
            # translate it to) 
      new_word += ')' 
     else: 
      new_word += '(' 
    return new_word 

duplicate_encode('recede') 
# '()()()' 
+0

Это супер полезно! я забыл упомянуть, что я хочу, чтобы моя функция также игнорировала случай. Итак, возьмите «Успех», который должен вернуться)())()). –

+0

Вы можете преобразовать слово в нижний регистр с помощью метода '.lower()'. См. Обновление. – Psidom

+0

превосходно, это сработало отлично! –

1

Ваш код Хороша просто нужно некоторое изменение, это будет здорово.

def duplicate_encode(word): 
    """ 
    To replace the duplicate letter with ")" in a string. 
    if given letter is unique it replaced with "(" 
    """ 
    word_dict = {} # initialize a dictionary 
    new_word = "" 
    for i in set(word): # this loop is used to count duplicate words 
     word_count = word.count(i) 
     word_dict[i] = word_count # add letter and count of the letter to dictionary 
    for i in word: 
     if word_dict[i] > 1: 
      new_word += ")" 
     else: 
      new_word += "(" 
    print new_word 

duplicate_encode("recede") 

Я думаю, вы получили ответ :)

1

Просто потому, что (это поздно и) это возможно:

def duplicate_encode(word): 

    return (lambda w: ''.join(('(', ')')[c in w[:i] + w[i+1:]] for i, c in enumerate(w)))(word.lower()) 

print(duplicate_encode("rEcede")) 

ВЫВОД

> python3 test.py 
()()() 
> 
Смежные вопросы