본문 바로가기

코리아IT

240321 과제

 

문제

과제

  • '수정하기' 기능 추가
    • 수정할 단어를 선택하세요: 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):
        with open(filename, 'r') as f:
            while True:
                line = f.readline()
                if line:
                    data = line.strip().split(',')
                    # word = Word(data[0], data[1], data[2])
                    wordList.append(Word(data[0], data[1], data[2]))
                else:
                    break
            print('데이터를 불러왔습니다')

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

    def run(self):
        while True:
            try:
                menu = int(input('1.등록하기 2.출력하기 3.저장하기 4.불러오기 5.종료하기'))
                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:
                    print('프로그램을 종료합니다')
                    break
            except Exception as e:
                print(e)
                print('다시 입력하세요!')

start = Menu()
start.run()

 

 

 

 

답안

 


    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:
    # 파일에서 데이터 불러오기 기능을 분리하여 __init__에서 호출함
    def __init__(self):
        self.loadData()

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

    # 단어 수정 기능
    def updateWord(self):
        eng = input('수정할 단어를 선택하세요: ')
        for word in wordList:
            if word.getEng() == eng:
                kor = input(eng + '의 뜻을 입력하세요: ')
                lev = input(eng + '의 레벨을 입력하세요: ')
                word.setKor(kor)
                word.setLev(lev)
                print('수정되었습니다.')
                return
        print('선택한 단어가 없습니다.')

    # 단어 삭제 기능
    def deleteWord(self):
        eng = input('삭제할 단어를 선택하세요: ')
        for i, word in enumerate(wordList):
            if word.getEng() == eng:
                del wordList[i]
                print('삭제되었습니다.')
                return
        print('선택한 단어가 없습니다.')

    def printAll(self):
        for data in wordList:
            print(data.getEng() + ' : ' + data.getKor() + ' (레벨 ' + data.getLev() + ')')

    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], data[2]))
                    else:
                        break
                print('데이터를 불러왔습니다')
        except FileNotFoundError:
            pass  # 파일이 없는 경우 스킵

'코리아IT' 카테고리의 다른 글

240324 파일 정리 프로그램(과제)  (0) 2024.03.24
240322  (0) 2024.03.22
240321  (0) 2024.03.21
240320  (0) 2024.03.20
240319  (0) 2024.03.19