python

김건웅·2026년 1월 3일

문득 내가 입력한 문장에서 특정 단어를 찾고 싶다는 생각에서 한번 만들어보고 싶어 도전해봤습니다.

만들고 싶었던 것

  • 입력한 문장에 찾고싶어하는 단어를 입력하면 찾아줘야함
  • 그 값을 숫자로 표시해줌
    ex) 해당 단어는 총 3개가 있고 위치는 3번째,4번째 입니다

기존에 알고 있던 것

  • pythonfor
  • pythonif

(단, 깊이 있게는 아직 학습중에 있음)
(둘다 기본적으로 어떠한 기능이 있다 정도로만 알고있는 상태)

초반 틀 잡기

원래는 하지 않았던 단계이지만 #(주석)을 활용해보고싶었으므로 활용해봤습니다
'#문장 입력하기'
'#찾고자하는 단어 입력하기'
'#해당 단어 갯수 및 위치 출력하기'

문장 입력하기

입력을 해야한다고 했을때 무엇인가 직접 입력할수 있는 명령어가 input 이외에 것들이 생각나지 않아 활용했습니다.

'#문장 입력하기'
'input_text = input("문장 입력 : ")'

단어 입력하기

위와 같이 input 활용

'#찾고자 하는 단어 입력하기'
find_text = input("단어 입력 : ")

해당 단어 갯수와 위치 찾기

이 부분에서 고민을 정말 많이 했습니다.
기존에 알고있는 지식이 좁은 탓에 적절한 답이 생각나지 않아 갯수와 위치를 따로따로 찾아봤습니다.

1.단어 갯수 찾기

  • 단어를 찾기위해 input_text를 단어 단위로 쪼개야된다라는 생각을 하게 되었고,
    .split() 을 활용하여 띄어쓰기 단위로 input_text를 쪼개보았습니다.


    위와 같이 for문 과 if문을 작성해봤으며 단어 단위로 쪼개진 input_text 값에서 find_text와 동일한 값을 c라는 리스트에 추가했습니다.
    그 후에 len을 활용하여 c안에 있는 값의 갯수를 출력하여 find_text의 갯수를 출력했습니다.

    2.단어 위치 찾기
    -시도하면서 제일 어려움이 많았던 단계이며, 해당 값을 출력하기 위해선 아래와 같이 생각했습니다.

    'input_text에서 find_text를 찾아 해당 index 값을 표출한다.
    그 후 index값은 우리가 생각하는 n번째의 -1이므로(0부터 시작하니) 해당 index 값+1+'번째'로 출력을 해야한다'

    그래서 해당 코드를 작성했습니다.

    이전과 동일하게 for,if,split()을 활용했으며 tracking_find_text 라는 변수를 만들어 해당 반복구간에서 나오는 각 출력 값을 +1+'번째'를 추가하여 d리스트에 추가했습니다.

    마지막 출력

    마지막 결과값은 f-string을 활용하여 아래와 같이 작성했습니다.

    첫번째 문제 발생

    위 구간에서 발생한 문제
    와 같은 에러가 발생 했고
    나름대로 분석한 결과 d.append(tracking_find_text +1 ,'번째')에 ,로 2개의 argument 가 입력되어 에러가 발생했다는 생각이 들어 코드를 아래와 같이 수정했습니다.

    append에 하나의 argument를 주기 위해 tracking_find_text에 +1,'번째'를 추가했습니다.

    두번째 문제 발생

    잘 흘러간다 생각했지만 생각과는 다른 값이 표출 되었습니다.

    갯수는 잘 출력되었으나 index 값은 똑같은 값만 표출 되었고 나름대로 분석을 해보았습니다.

    먼저 for문에 대해서 다시 생각을 해보았고 for i in input_text.split():은 input_text에서의 문장을 띄어쓰기를 기준으로 쪼개어 각 값을 리스트로 만들었으며 for로 인하여 각 값들이 if문에 들어가 c[0](어차피 c의 리스트 값들은 모두 똑같으니 [0]로 설정)와 같은지 검사하였습니다.
    같은 값들은 tracking_find_text에 "+1+'번째'" 가 추가가 되면서 d 리스트에 추가까지는 되었으나 input_text.split().index(i)에서 해당 값은 input_text.split()에서의 인덱스 값을 표출하는 것이므로 만일 같은 i값이라면 모두 동일한 index 값만 나올 수 밖에 없는 코드 였습니다.

    해당 과정에서 문제를 해결하기 위해서는 검사가 끝난 i 값을 input_text.split()에서 삭제를 해야 정상적인 값이 표출될꺼 같다는 생각을 했고 아래 코드를 추가해보았습니다.

    위 코드 수정과 동시에 하지만 어차피 검사하는 구간은 input_text.split()이고 if문에서 삭제를 한다고 해도 결과 값에는 영향을 주지 못한다라는 생각에 기존의 지식으로는 원본에서의 해당 검사가 끝난 값을 삭제할 방법이 떠오르지 않아 진전이 없었습니다.

    문제 2 해결(?)

    결국은 google에 검색을 하였고 첫 검색은 for문안에 있는 if문의 출력값으로 인해 for문의 범위에 영향을 줄수 있는지에 대해 질문을 하였고 답으로는 직접적인 영향을 주지는 못하나 간접적인 영향으로는 줄수있다는 답을 얻었습니다. 이 또한 제 현재 지식으로는 방법을 찾을수가 없었습니다.
    결국 다시 google에 도움을 받았고 enumerate()이라는 새로운 명령어를 알게 되었습니다.
    해당 명령어는 각 리스트 값들의 index 값과 리스트 값을 같이 표출해주는 명령어라는 것으로 이해했으며 아래와 같이 코드를 수정했습니다.

    다만 이 결과에는 d 리스트에 아무 값이 존재하지 않는 결과를 받게되었습니다.
    해당 결과에 대해서는 enumerate()의 사용이 잘못되었다고 판단이 되어 다시 검색을 해보았고 for 다음에 i 만 있으면 따로 index 값을 지정하지 못한다라고 판단 후에 for index, i을 추가 했으며 전의 코드에서 tracking_find_text=input_text.split(i)+1,'번째'는 검사 중인 i의 값에 대해서 원본 범위에 대해 검사하는 것 이라고 생각되어 같은 값이 나올것으로 생각이 되었습니다. 그래서 검사 중인 index 값을 활용해야한다고 생각이 들어 아래와 같이 코드를 수정했습니다.

    이렇게 수정을 하면 i가 c[0]과 같은 값의 인덱스 값은 +1'번째'가 추가되면서 리스트 d에 추가 될것이고 출력하면 정상 출력이 될꺼라고 생각했습니다.

마지막 출력은 아래와 같았습니다.

갯수와 위치를 알려줘서 만족했으나 아쉬웠던 부분은 d 리스트가 리스트 전체로 출력되다보니 '와괄호도 같이 표출이 되었습니다. 해당 부분도 처음 맞이한 상황이라 고민을 하던 중 또 다시 google에 검색을 하게 되었고 {', '.join(d)}라는 형식을 알게되었습니다.
해당 join이라는 명령어는 리스트를 string 구조로 보기 편하게 출력을 해주는 명령어 였고 (', '로 인하여 각 리스트 값들 사이에 ', '를 추가해주는 것으로 확인이 되었습니다.

정말 마지막으로 아래 명령어를 수정하여 출력까지 했습니다.

마지막이길 바랬지만 역시 또 다른 에러가 발생했습니다.
에러 분석 결과로는 join은 list를 보기 좋게 해주는건데 d 안에 Tuple이 있다고 하여 d리스트를 확인해 보니 (2,'번째')와 같이 값들이 나열되어있었습니다. ()로 tuple이 생성되었고 에러를 멈추기 위해서는 tracking_find_text=f"{index+1}번째" 로 바꾸어주었습니다.

수정 이후 다시 정말 정말 마지막으로 출력을 해보았습니다.

정상적으로 원하는 결과를 받았습니다.
전체적인 코드는 아래와 같이 마무리 했습니다.

마무리

이후 코드를 살펴보니 뿌듯하면서도 다른분들이 보기에는 많이 난잡해보일수도 있겠다는 생각이 들어 정말 잘짜여진 코드는 어떤 것들이 있을까라는 생각이 들었습니다.
그러다 google로 검색을 해보니 AI는 5초..?
(저는 고민하는 시간이 조금 많이 걸렸던터라 3시간 정도 걸렸습니다.) 정도만에 더욱 완벽한 코드를 작성해주었습니다. 이러한 서비스를 만드신 분들이 정말 대단하신 분들이라는 것을 다시 한번 더 느끼게 되었고 아직은 정말 까마득한 일이지만 꾸준히 공부하며 언젠가는 지금의 저같은 사람들에게 필요한 서비스를 제공할수 있는 개발자가 되야겠다는 생각이 다시 한번 더 들었습니다.

이만 글을 마치며 개발자가 되기 위해 노력 중인 초보자 였습니다.^^;;

0개의 댓글