파이썬

Python 21. 단어장!

아리벱 2024. 3. 22. 16:49

파일 입출력을 이용해서 단어장을 만들어 보겠습니다.

다음 조건들을 만족시켜 영어 단어장을 만들어보도록 합시다!


 

아래 조건을 만족하는 영어 단어장을 만들어보자

    1. 등록하기, 2. 출력하기, 3. 저장하기, 4. 불러오기, 5. 종료하기
  • 1을 선택했을 경우
    • 단어를 입력하세요: apple
    • 뜻을 입력하세요: 사과
    • 레벨을 입력하세요: 1
    • 등록되었습니다.
  • 2를 선택했을 경우
    • apple : 사과 (레벨 1)
  • 3을 선택했을 경우
    • 저장되었습니다. (파일에 저장, words.txt)
  • 4를 선택했을 경우
    • 불러왔습니다. (파일에서 읽어옴, words.txt)
  • 5를 선택했을 경우
    • 프로그램을 종료합니다.
  • 1~5까지의 숫자가 아닌 경우
    • 다시 입력하세요!

단, 프로그램은 클래스로 설계하도록 함

 

제일 먼저 빈 리스트를 생성합니다.

Word 클래스를 만들어 set,get 메소드를 만들어 변수에 접근하기 용이하게 합니다. set 메소드를 통해 임의의 값을 변수에 지정할 수 있게 하고 get 메소드를 통해 변수의 값을 불러옵니다.

각 변수마다 set, get메소드를 만든 후 WordService 클래스를 만들어 사용자가 단어, 뜻, 레벌 등 값을 입력하게 만들어 1. 등록하기, 2. 출력하기, 3. 저장하기, 4. 불러오기, 5. 종료하기에 알맞게 메소드를 만들어줍니다.

마지막으로 사용자가 1. 등록하기, 2. 출력하기, 3. 저장하기, 4. 불러오기, 5. 종료하기 중 하나의 숫자를 입력하게 하여 원하는 메뉴를 실행하게 합니다. 이때 무한 루프를 만들어 프로그램이 종료할 때까지 계속 실행되도록 만들어줍니다.

 

위의 알고리즘대로 코드를 작성해보겠습니다.

Word 클래스를 생성하여 각 변수마다 set, get 메소드를 만들어줍니다.

insertWord() 메소드를 만들어 input()을 통해 단어, 뜻, 레벨을 입력받습니다. word 객체를 만들고 wordList에 입력값을 추가합니다. 1. 등록하기의 메소드가 잘 만들어졌습니다.

printAll() 메소드를 만들어 2. 출력하기의 메소드를 생성해보겠습니다. for문을 통해 리스트의 요소들을 사용하도록 만들어줍니다. data 변수로 getEng(), getKor(), getLev()를 통해 값을 출력합니다.

saveAll() 메소드는 3. 저장하기의 역할을 합니다. 학습했던 파일의 입력이 이 부분입니다. with문을 통해 자동으로 close메소드를 실행하게 합니다. 역시나 for 문을 통해 wordList에 내포되어 있는 값들을 모두 저장할 수 있습니다.

loadData() 메소드는 4. 불러오기의 역할을 합니다. 파일의 쓰기가 불러오기라고 할 수 있습니다. with문과 while문을 이용합니다. readline()을 통해 한 줄씩 불러옵니다. 내용이 있다면 strip()을 통해 공백등을 제거해주고 split(',')을 통해 콤마(comma)로 구분지어 wordList에 추가합니다. 각 행마다 반복하다 내용이 없을 때 무한 루프를 깨고 나옵니다.

Menu 클래스 생성하여 run()메소드를 만들어줍니다. run()메소드를 만들어 1. 등록하기, 2. 출력하기, 3. 저장하기, 4. 불러오기, 5. 종료하기가 입력된 값에 따라 실해되도록 설정합니다.

 

 

 

 


위의 코드는 수업 때 익힌 코드다. 위의 코드처럼 정교하고 깔끔하게 코드를 짜기까지는 꽤 오랜 시간이 걸린 것 같다. 처음에 여러 클래스를 만들어 각 클래스마다 메소드가 있고 객체도 다양하여 매우 헷갈렸던 것 같아 어거지로 코드를 짰었다. 가장 힘들었던 점은 변수를 남발하여 사용하여 에러를 자주 만들었다. 코드 작성할 때 이 부분은 항상 유념해야 할 것 같다.  조금 더 숙련된다면 조금 더 크게 보고 깔끔하게 짤 수 있을 것 같다.