코딩,해볼까

03.22. 파이썬 300제 풀이 본문

Back/TIL

03.22. 파이썬 300제 풀이

떠굥 2023. 3. 22. 23:14

0.  오늘 배운 것

 

심화 강의 완강

초보자를 위한 파이썬 300제로 삽질.

 

 

1.  문제점

 

Filter 함수를 통해서 string에 있는 글자 중 원하는 글자를 골라내어 출력할 수 있지 않을까 라는 생각에서 출발.

filter 함수 예제는 대부분 list를 가지고 원하는 정보를 골라내었는데 string으로 해보고 싶었다.

예제를 찾아봤는데 string으로 할 수 있는 방법이 없었다.

 

 

2. 시행착오

 

 원래 예제에서 원하는 답은 아래와 같다.

 

string = "홀짝홀짝홀짝"
print(string[0])
print(string[2])
print(string[4])

 

 

하지만 나는 이것을 다른 함수로 표현해 보고 싶었다.

filter 함수를 도전했으나 실패. filter 함수는 꼭 함수를 인자로 받아야 한다.

 

result = filter("홀", string)
print(result)
# 오류 : filter 함수는 함수를 인자로 받는다.

 

 

string에서 "홀" 이라는 글자를 가져와서 == "홀" 과 같으면  print 홀 함수를 실행시킨다.

string["홀"] 안에 인덱스가 정수로 들어가야 한다는 TypeError 를 뱉었다.

 

def find_holl(string):
     return string["홀"] == "홀"
for holl in filter(find_holl,string):
     print(holl)
# TypeError: string indices must be integers 문자열의 인덱스는 문자가 아닌 정수로 줘야 한다.

 

 

return string[ ] << 이 부분에 문제가 있는데.. 어떻게 바꿔야 할지 모르겠다.

string = "홀짝홀짝홀짝" str - 한문장

string = ["홀", "짝", "홀", "짝", "홀", "짝"] list

 

def find_holl(string):
     return string[0]  == "홀"
for holl in filter(find_holl, string):
     print(holl)
# 왜 되는건지 모르겠음.
# 이렇게 사용하는 것이 맞는건지? filter 함수로 string의 글자를 골라낼 수 잇는지
# string 의 글자들이 홀과 같을 때

 

 

3. 해결방법

 

list = []
def find_holl(string):
     for i in string:
         if i == "홀":
            list.append(i)
 print(list)

#<function find_holl at 0x00000285D699CB80>

 

for문을 사용했을때는 정상적으로 잘 작동하는 모습.

string에 있는 i 가 "홀" 과 같을 때 list에 i를 추가한다.

list를 출력 = ["홀", "홀", "홀"] 이렇게 정상적으로 출력된다.

 

list = []
for i in string:
    if i == "홀":
        list.append(i)
print(list)

 

4. 알게된 점

filter 는 list 와 함께 쓰자.

for, map 과 같은 어렵다고 생각되는 함수를 많이 사용해보자.

기본적인 함수 작성법, 문법을 아직 잘 모르고 있으니 기초에 충실하자.

 

Comments