본문 바로가기

코딩/파이썬

파이썬 과제 (5). 영어 단어장 만들기 (파일 입출력)

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

     - 1. 등록하기 2. 출력하기 3. 저장하기 4. 불러오기 
     - 1을 선택했을 경우

                   - 단어를 입력하세요 : apple

                   - 뜻을 입력하세요 : 사과

                   - 레벨을 입력하세요 : 1

                   - 등록되었습니다.

     - 2를 선택했을 경우

                   - apple: 사과 (레벨 1)

     - 3을 선택했을 경우

                   - 저장되었습니다. (파일에 저장, words.txt)

     - 4를 선택했을 경우

                   - 불러왔습니다. (파일에서 읽어옴, words.txt)

     - 5를 선택했을 경우

                   - 프로그램을 종료합니다.

     - 1~5까지의 숫자가 아닌 경우

                   - 다시 입력하세요!

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

     

   - '수정하기' 기능 추가

                   - 수정할 단어를 선택하세요 : apple

                              - 선택한 단어가 없습니다

                              - apple의 뜻을 입력하세요 : 사과

                              - apple의 레벨을 입력하세요 : 1

                              - 수정되었습니다.

   - '삭제하기' 기능 추가

                   - 삭제할 단어를 선택하세요 : apple

                               - 선택한 단어가 없습니다

                               - 삭제되었습니다.

   - 불러오기 메뉴 변경

           - 메뉴 4번을 삭제

           - 프로그램 시작시 기존에 단어장 파일이 존재하는지 확인하고

             있으면 그 파일에 있는 데이터를 메모리에 불러옴(없으면 스킵)

 

 

wordList = []
filename = 'words.txt'
class Word:
    def __init__(self, eng, kor, lev=1):
        self.eng = eng
        self.kor = kor
        self.lev = lev

    def setEng(self, eng):
        self.eng = eng

    def getEng(self):
        return self.eng

    def setKor(self, kor):
        self.kor = kor

    def getKor(self):
        return self.kor

    def setLev(self, lev):
        self.lev = lev

    def getLev(self):
        return self.lev
class WordService:
    def insertWord(self):
        eng = input('단어를 입력하세요: ')
        kor = input('뜻을 입력하세요: ')
        lev = input('레벨을 입력하세요: ')
        word = Word(eng, kor, lev)
        wordList.append(word)
        print('등록되었습니다.')

    def printAll(self):
        for data in wordList:
            # apple : 사과 (레벨 1)
            print(data.getEng() + ' : ' + data.getKor() + ' (레벨 ' + data.getLev() + ')')

    def saveAll(self):
        with open(filename, 'w') as f:
            for data in wordList:
                f.write(f'{data.getEng()},{data.getKor()},{data.getLev()}\n')
            print('파일에 저장했습니다')

    def loadData(self):
       try:
        with open(filename, 'r') as f:
            while True:
                line = f.readline()
                # apple,사과,1
                if line:
                    data = line.strip().split(',')
                    # ['apple', '사과', '1']
                    # word = Word(data[0], data[1], data[2])
                    wordList.append(Word(data[0], data[1], data[2]))
                else:
                    break
            print('데이터를 불러왔습니다')
       except FileNotFoundError:
         print('기존 단어장 파일을 찾을 수 없습니다. 새로운 단어장을 생성합니다.')

    def modifyWord(self):
        eng = input('수정할 단어를 선택하세요:')
        found = False
        for data in wordList:
            kor = input(f'{eng}의 뜻을 입력하세요: ')
            lev = input(f'{eng}의 레벨을 입력하세요:')
            data.setKor(kor)
            data.setLev(lev)
            print('수정되었습니다.')
            found = True
            break
        if not found:
          print('선택한 단어가 없습니다.')

    def deleteWord(self):
      eng = input('삭제할 단어를 선택하세요:')
      for data in wordList:
          if data.getEng() == eng:
              wordList.remove(data)
              print('삭제되었습니다.')
              return
      print('선택한 단어가 없습니다.')
class Menu:
    def __init__(self):
        self.service = WordService()

    def run(self):
        while True:
            try:
                menu = int(input('1.등록하기 2.출력하기 3.저장하기 4.불러오기 5.수정하기 6.삭제하기 7.종료하기'))
                if menu == 1:
                    self.service.insertWord()
                elif menu == 2:
                    self.service.printAll()
                elif menu == 3:
                    self.service.saveAll()
                elif menu == 4:
                    self.service.loadData()
                elif menu == 5:
                    self.service.modifyWord()
                elif menu == 6:
                    self.service.deleteWord()
                elif menu == 7:
                    print('프로그램을 종료합니다')
                    break
            except Exception as e:
                print(e)
                print('다시 입력하세요!')
start = Menu()
start.run()

'코딩 > 파이썬' 카테고리의 다른 글

파이썬 과제 (6). 기사 스크랩 디렉토리 관리 프로그램  (0) 2024.03.26
파일 입출력 라이브러리  (0) 2024.03.21
변수 타입 어노테이션  (0) 2024.03.21
파이썬 모듈  (0) 2024.03.20
파일 입출력  (0) 2024.03.20