Объяснение:
Создадим тестовый скрипт:
1
#!/usr/bin/env python
2
3
4
def duplicate_encode(word):
5
6
iter = str(word)
7
print(iter)
8
9
duplicate_encode('test')
Запускаем, проверяем:
./duplicate_encode.py
test
Re-playCopy to ClipboardPauseFull View
ОК, теперь можно придумывать решение.
Решение не претендует на оригинальность и уж тем более на идеальность или красоту подхода, но раз кодить на Python приходиться редко — то хотя бы такая разминка для мозгов.
На каком-то собеседовании я встречал похожую задачу, идея решения достаточно простая:
создаём пустой список
запускаем цикл, в котором проверяем каждый элемент переданного в аргументе функции слова
каждый элемент проверяем с циклом: если элемента в списке нет — ставим «(«, если есть — ставим «)»
ОК, пробуем:
01
#!/usr/bin/env python
02
03
def duplicate_encode(word):
04
05
# will conatin word from function's argument
06
iter_word = str(word)
07
# will container already checked items to compare with
08
check_list = []
09
# will contain brackets
10
formatted_list = []
11
12
print('Checking word: {}'.format(iter_word))
13
14
for i in iter_word:
15
print('Checking item: {}'.format(i))
16
if i not in check_list:
17
print('{} not found in the list[], so using ")" symbol'.format(i))
18
check_list.append(i)
19
i = '('
20
formatted_list.append(i)
21
else:
22
print('{} found in the list[], so using "(" symbol'.format(i))
23
check_list.append(i)
24
i = ')'
25
formatted_list.append(i)
26
27
print('Result: {}'.format(''.join(map(str, formatted_list
28
29
duplicate_encode('test')
Рассмотрим код построчно:
iter_word = str(word) — приводим input к типу str, сохраняем в переменную iter_word
check_list = [] — создаём пустой список, в который будем сохранять элементы, которые уже проверены и которым будем сверяться дальше в цикле
formatted_list = [] — пустой сисок, который будет содержать символы «(» и «)»
for i in iter_word: — запускаем цикл и проверяем каждый элемент из переменной iter_word
if i not in check_list — в самом начале список check_list у нас пустой, дальше на каждой итерации ищем в нём очередной элемент i
check_list.append(i) — независимо от результата — добавляем уже проверенный элемент в список check_list
i = '(' — раз i не найден в списке check_list — то сохраняем его в formatted_list как «(«
else: i = ')' — если i найден в списке, то сохраняем его в formatted_list как «)»
print('Result: {}'.format(''.join(map(str, formatted_list — и в конце выводим получившийся список formatted_list в виде обычного слова
Проверяем:
./duplicate_encode.py
Checking word: test
Checking item: t
t not found in the list[], so using ")" symbol
Checking item: e
e not found in the list[], so using ")" symbol
Checking item: s
s not found in the list[], so using ")" symbol
Checking item: t
t found in the list[], so using "(" symbol
Result: )))(
Re-playCopy to ClipboardPauseFull View
ОК — работает.
Но вернёмся к задаче.
Во-первых: «Ignore capitalization when determining if a character is a duplicate» — ОК, добавим строковый метод lower():
1
...
2
for i in iter_word.lower():
3
...
4
duplicate_encode('Test')
Проверяем:
./duplicate_encode.py
Checking word: Test
Checking item: t
t not found in the list[], so using ")" symbol
Checking item: e
e not found in the list[], so using ")" symbol
Checking item: s
s not found in the list[], so using ")" symbol
Checking item: t
t found in the list[], so using "(" symbol
Result: )))(
Re-playCopy to ClipboardPauseFull View
Но тесты в Codewars снова вернут ошибку:
Поделитесь своими знаниями, ответьте на вопрос:
Как записать звук и добавить нужные отрывки речи ля героев в программе ? программа: мульти-пульти 2) объясни , чем команда играть звук до завершения отличается от команды играть