본문 바로가기
파이썬

25. 영단어 만들기(기능 추가) 과제

by 곽정우 2024. 3. 23.

기존의 영단어 코드를 활용하여 기능을 추가하기!!

기존 영단어 코드 관련 내용:https://kjw-ai.tistory.com/entry/21-%ED%8C%8C%EC%9D%BC-%EC%9E%85%EC%B6%9C%EB%A0%A5%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%8B%A8%EC%96%B4%EC%9E%A5-%EB%A7%8C%EB%93%A4%EA%B8%B0

문제

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

  • '수정하기' 기능을 vocab에 추가
    • 수정할 단어를 선택하세요: 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:
            print(data.getEng() + ' : ' + data.getKor() + ' (레벨 ' + str(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()
                    if line:
                        data = line.strip().split(',')
                        wordList.append(Word(data[0], data[1], int(data[2])))
                    else:
                        break
                print('데이터를 불러왔습니다')
        except FileNotFoundError:
            print("파일이 존재하지 않습니다.")

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

    def deleteWord(self):
        target_word = input('삭제할 단어를 선택하세요: ')
        found = False
        for data in wordList:
            if data.getEng() == target_word:
                found = True
                wordList.remove(data)
                print('삭제되었습니다.')
                break
        if not found:
            print('선택한 단어가 없습니다.')

class Menu:
    def __init__(self):
        self.service = WordService()

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

start = Menu()
start.run()

결과

  • 불러오기 메뉴 변경
    • 프로그램 시작시 기존에 단어장 파일이 존재하는지 확인하고 있으면 그 파일에 있는 데이터를 메모리에 불러옴(없으면 스킵) >>> 프로그램 시작시 단어장 파일 존재 확인 후 결과 출력
    • 메뉴 4번을 삭제 >>> 기존의 '불러오기' 대신 '수정하기'로 변경

  • '삭제하기' 기능 추가
    • 삭제할 단어를 선택하세요: apple
      • 선택한 단어가 없습니다.
      • 삭제되었습니다.

  • '수정하기' 기능을 vocab에 추가
    • 수정할 단어를 선택하세요: apple
      • 선택한 단어가 없습니다.
      • apple 의 뜻을 입력하세요: 사과
      • apple 의 레벨을 입력하세요:1
      • 수정되었습니다.