Python/문제

파일 입출력을 이용한 단어장 만들기

dustKim 2024. 3. 24. 20:06
문제

 

먼저 프로그램을 실행했을 때, 기존에 단어장 파일이 있으면 파일의 데이터를 가져오고 없으면 스킵이지만 단어장을 스킵인 동작을 수행할 함수를 만들어줘야 한다.

파일 확인하기

예외 처리를 사용하여 파일이 있으면 그 파일을 읽어서 가져오고, 파일이 없으면 파일을 만들어준다. 

그리고 우리가 1~5까지 입력을 받았을 때, 동작하는 함수를 만들어줘야 한다.

이동 및 동작

반복문을 사용하여 1 ~ 5까지 숫자 중 하나를 선택하면 해당 함수로 이동하여 작업을 수행하는 방식이다. 이때 1 ~ 5를 제외한 다른 숫자가 들어왔을 때, 잘못된 선택이라는 것을 알려주기 위해 예외처리를 사용하여 작성했다.

그럼 이제 숫자를 선택했을 때, 이동해 작업을 수행할 함수들을 만들어주면 된다.

입력하기

class를 만들어서 그 안에 함수들을 담을 것이다. 외부에 list를 하나 만들어줬다. 그리고 그 list를 매개변수로 받아서 사용할 것이다. 1번을 선택했을 때, "insert_word" 함수로 이동하여 동작하면 input() 함수로 단어, 뜻, 레벨을 입력받고 string으로 저장해 list에 넣어주었다.(중간에 print(self.list1[0])은 확인해 보기 위해서 넣었는데 지우질 못했음..깜빡함..)

출력하기

2번을 선택했을 때 출력해 주는 함수를 만들었다. list1이라는 리스트 안에 각 인덱스에 string으로 값을 넣었기 때문에 반복문을 돌려서 출력만 해주면 된다.

저장하기

3번을 선택했을 때 저장하는 함수를 만들었다. 파일에 저장을 하기 위해 open() 함수를 사용하여 write mode로 list1의 값을 파일에 쓰게 만들었다. join() 함수를 사용하였는데 "(구분자).join() 은 list를 구분자를 기준으로 합쳐주는 것이다. 이때 개행을 구분자로 넣으면 리스트 값들 사이마다 개행을 수행한다.

수정하기

4번을 선택했을 때 수정하는 함수를 만들었다. 먼저 수정할 단어를 입력하면 반복문을 돌려서 list1의 길이만큼 반복하고 그 안에 수정할 단어가 있으면 새로운 뜻과 레벨을 입력하고 다시 string으로 넣어줬다. 즉, 인덱스 안에 값을 바꿔줬다. 

그리고 선택한 단어가 없을 때를 대비해 판단할 수 있는 변수를 하나 만들어 구분해 줬다.

삭제하기

5번을 선택했을 때 삭제하는 함수를 만들었다. 4번을 선택했을 때와 똑같이 구분할 수 있는 변수를 하나 만들어주고 시작했다. 삭제할 단어를 입력받고, list1안에서 그 단어가 있는지 확인 후 remove를 사용하여 제거해 줬다. 

 

그리고 이 모든 함수들을 class tool 안에 담아서 main함수를 호출하면 동작하게 만들었다.

사실 내가 만든 함수는 실용적이지는 못할 것 같다. string 자체를 list에 넣었기 때문에 단어를 찾기 번거로울 뿐 아니라 바꿀 때도 쉽지 않다. 그래서 좀 더 활용성 있고 쉽게 바꿀 수 있는 방법을 생각해 봐야 겠다.