요즘 Code Kata를 푸는 방식이 굳어지고 있다는 것을 느꼈습니다.
다른 사람들의 풀이를 보면서 반성해보는 시간을 갖기 위해
CodeWars를 짬짬히 풀어보려고 합니다.
Trolls are attacking your comment section!
A common way to deal with this situation is to remove all of the vowels from the trolls' comments, neutralizing the threat.
Your task is to write a function that takes a string and return a new string with all vowels removed.
For example, the string "This website is for losers LOL!" would become "Ths wbst s fr lsrs LL!".
Note: for this kata y
isn't considered a vowel.
def disemvowel(string):
vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']
for character in string:
if character in vowels:
string = string[:string.find(character)]+string[string.find(character)+1:]
return string
input string의 모든 character에 하나하나 접근해서 vowel인지 확인했고
vowel이라면 그 character 바로 앞까지의 string과
바로 뒤의 character부터의 string끝까지를 붙였습니다.
python은 string타입에 대해 translate
메서드를 제공합니다.
str.translate(table[, deletechars])
translate
메서드를 사용하기 위해
str.maketrans
메서드에 대해 공부할 필요가 있습니다.
str.maketrans
메서드는 str.translate() 에 사용할 수 있는 table을 리턴해줍니다. 문법은 다음과 같습니다.
str.maketrans(x[, y[, z]])
>>> test_dict={'a':None, 'e':None}
>>> str.maketrans(test_dict)
{97: None, 101: None}```
|original value|convert value|
|:-:|:-:|
|a|None|
|e|None|
2. argument가 2개일 때
같은 길이의 string을 넣어줘야 합니다.
첫번째 인자로 받은 string과
두번째 인자로 받은 string의
같은 index의 character들끼리 mapping됩니다.
```python
>>> intab = "aeiou"
>>> outtab = "12345"
>>> trantab = str.maketrans(intab, outtab)
>>> trantab
{97: 49, 101: 50, 105: 51, 111: 52, 117: 53}
original vlaue | convert value |
---|---|
a | 1 |
e | 2 |
i | 3 |
o | 4 |
u | 5 |
>>> intab='abcd'
>>> outtab='efgh'
>>> none_map='abxy'
>>> str.maketrans(intab,outtab,none_map)
{97: None, 98: None, 99: 103, 100: 104, 120: None, 121: None}
intab과 outtab에 의해 첫번째 mapping은 다음과 같습니다.
origina value | convert value |
---|---|
a | e |
b | f |
c | g |
d | h |
그리고 none_map이라는 세번째 인자가 None으로 mapping될 character들을 명시함으로써 mapping은 다음과 같이 바뀝니다.
origina value | convert value |
---|---|
a | None |
b | None |
c | g |
d | h |
x | None |
y | None |
def disemvowel(string):
return string.translate(str.maketrans('','','aeiouAEIOU'))
천천히 위 Solution을 따져보겠습니다.
str.maketrans('','','aeiouAEIOU')
위 메서드로 인해 다음과 같은 테이블을 만듭니다.
original value | convert value |
---|---|
a | None |
e | None |
i | None |
o | None |
u | None |
A | None |
E | None |
I | None |
O | None |
U | None |
그뒤에 string.translate(table)
메서드를 사용해서 string을 table에 맞게 translate합니다.