■ 공부/Python

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

J U N E 2024. 3. 22. 13:32

문제
아래 조건을 만족하는 영어 단어장을 만들어 보자.
1.등록하기 2.출력하기 3.저장하기 4.불러오기 5.종료하기
1을 선택했을 경우,단어를 입력하세요: ex)apple
뜻을 입력하세요: ex)사과
레벨을 입력하세요: ex)1
등록되었습니다.
2를 선택했을 경우,apple : 사과 (레벨1) ...
3을 선택했을 경우,
저장되었습니다. (파일에 저장, words.txt)
4를 선택했을 경우,불러왔습니다 - 라는 메세지가 뜨면서 (파일에서 읽어옴, words.txt)읽어오면서 메모리에 등록 (그래서 2번이 가능해짐)
5를 선택했을 경우,프로그램을 종료합니다.
1~5의 숫자가 아닌경우,다시 입력하세요. 출력

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

추가기능
'수정하기' 기능 추가
수정할 단어를 선택하세요:apple
없을경우 >>선택한 단어가 없습니다.
apple의 뜻을 입력하세요: 사과
apple의 레벨을 입력하세요: 1
수정되었습니다.
'삭제하기' 기능 추가
삭제할 단어를 선택하세요: apple
없을경우 >>선택한 단어가 없습니다.
삭제되었습니다.
'블러오기' 기능 변경
메뉴 4번을 삭제
프로그램 시작시 기존에 단어장 파일이 존재하는지 확인
있으면 그 파일에 있는 데이터를 메모리에 불러옵니다.
없으면 스킵

 

class Words:
    words = {}
    modified = False

    def loadMemo(self):
        self.words.clear()
        try:
            with open('words.txt', 'r') as f:
                lines = f.readlines()
                for line in lines:
                    word, mean = line.strip().split(' : ')
                    self.words[word] = mean
                print(f'{len(self.words)}개 단어를 불러왔습니다')
        except FileNotFoundError:
            return

    def saveMemo(self):
        if len(self.words) > 0 and self.modified:
            with open('words.txt', 'w') as f:
                for word, mean in self.words.items():
                    f.write(f'{word} : {mean}\n')
            print(f'{len(self.words)}개 단어를 저장했습니다')
            self.modified = False

    def printWords(self):
        for word, mean in self.words.items():
            print(f'{word}: {mean}')

    def addWord(self):
        word = input('  단어를 입력하세요: ')
        mean = input('  의미를 입력하세요: ')
        level = input('  레벨을 입력하세요: ')
        self.words[word] = f'{mean} (레벨{level})'
        self.modified = True
        print('등록되었습니다')

    def modifyWord(self):
        word = input('  단어를 입력하세요: ')
        if word in self.words:
            mean = self.words.get(word)
            print(f'  {word}: {mean}')
            select = input('  메뉴를 선택하세요 (1.수정 2.삭제 3.취소): ')
            if (select == '1'):
                mean = input(f'  {word}의 의미를 입력하세요: ')
                level = input(f'  {word}의 레벨을 입력하세요: ')
                self.words[word] = f'{mean} (레벨{level})'
                self.modified = True
                print('수정되었습니다')
            elif (select == '2'):
                del self.words[word]
                self.modified = True
                print('삭제했습니다')
        else:
            print(f'  {word}를 찾을 수 없습니다')

words = Words()
words.loadMemo()
words.printWords()

while True:
    try:
        menu = input('메뉴를 선택하세요 (1.등록 2.출력 3.수정 4.저장 5.종료): ')
    except:
        break

    if menu == '1':
        words.addWord()
    elif menu == '2':
        words.printWords()
    elif menu == '3':
        words.modifyWord()
    elif menu == '4':
        words.saveMemo()
    elif menu == '5':
        words.saveMemo()
        print('프로그램 종료')
        break
    else:
        print('다시 입력하세요')

 

으휴.. 아직 멀었다 멀었어..

꼴랑 이런 거 만드는 데도 몇 시간이 걸리는거야 대체

메모장이 여러 개일 경우를 생각해서 만들었는데

코드가 너무 꼬여서 이대로 가다간 탈모 올 것 같아

원래 과제대로 가기로 했다.

 

하지만 항상 그렇듯,

결과는 대부분 구린게 당연하고

일단 완성했다는 것에 의의를 두자.

 

첨에 생각했던 건 나중에 다시 구현해 보는 걸로 ㅠ.ㅠ