본문 바로가기
인공지능/파이썬 기초

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

by hyunji00pj 2024. 10. 2.

KDT_4기 파이썬 기초 1001(2)

2024.10.01 수업 내용 복습일기 두번째

 

오늘은 파일의 입출력을 응용한 문제로 영어 단어장을 만들어 보겠다

 

 

 

문제

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

  • 실행 예
1. 등록하기 2.출력하기 3.삭제하기 4.수정하기 5. 저장하기 6. 불러오기 7. 종료하기
  • 1을 선택했을 경우(입력한 데이터는 파일에 저장하지 않음)
단어를 입력하세요: apple
뜻을 입력하세요: 사과
레벨을 입력하세요: 1
등록되었습니다.
  • 2를 선택했을 경우(메모리에 저장된 모든 영단어를 리스트로 출력)
apple: 사과(레벨1)
banana: 바나나(레벨1)
  • 3을 선택했을 경우 삭제하기 기능을 추가해보자(삭제한 데이터는 파일에 저장하지 않음)
삭제할 단어를 입력하세요: apple
삭제할 단어가 없습니다
삭제할 단어를 입력하세요: apple
삭제되었습니다
  • 4를 선택했을 경우 수정하기 기능을 추가해 보자(수정한 데이터는 파일에 저장하지 않음
수정할 단어를 선택하세요:apple
선택한 단어가 없습니다
수정할 단어를 선택하세요:apple
apple의 뜻을 입력하세요: 사과
apple의 레벨을 입력하세요: 2
입력되었습니다
  • 5를 선택했을 경우(메모리에 저장된 모든 영단어를 파일에 저장)
저장되었습니다.

 

  • 6을 선택했을 경우(파일에 저장된 모든 영단어를 메모리로 불러옴)
불러왔습니다.
  • 7을 선택했을 경우(반복을 끝내고 프로그램을 종료함)
프로그램을 종료합니다
  • 단, 프로그램을 종료할 때까지 반복하여 메뉴를 입력받도록 하며, 클래스를 이용하여 설계하도록 함.메뉴입력 시 1~5가 아닌 숫자가 입력되는 경우 "다시 입력하세요!"라고 메세지 출력(오류처리)
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:
      # 객체.eng,객체.kor,객체.lev
      #print(data.getEng() + ':' + data.getKor() + '(레벨'+data.getLev()+')')
      print(f'{data.getEng()} : {data.getKor()}(레벨{data.getLev()})')

  #삭제하기
  def delWord(self):
      delword = input('삭제할 단어를 입력하세요: ')
      found = False
      for word in wordList:
          if word.getEng() == delword:
              wordList.remove(word)
              found = True
              print(f'{delword} 단어가 삭제되었습니다.')
              break
      if not found:
          print(f'{delword} 단어는 존재하지 않습니다.')

  #수정하기
  def modifyWord(self):
      modifyword = input('수정할 단어를 입력하세요: ')
      found = False
      for word in wordList:
          if word.getEng() == modifyword:
              found = True
              new_eng = input('새로운 영어 단어를 입력하세요 (그대로 유지하려면 Enter): ')
              new_kor = input('새로운 한국어 뜻을 입력하세요 (그대로 유지하려면 Enter): ')
              new_lev = input('새로운 레벨을 입력하세요 (그대로 유지하려면 Enter): ')

              if new_eng:
                  word.setEng(new_eng)
              if new_kor:
                  word.setKor(new_kor)
              if new_lev:
                  word.setLev(new_lev)

              print(f'{modifyword} 단어가 수정되었습니다.')
              break
      if not found:
          print(f'{modifyword} 단어는 존재하지 않습니다.')

  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()
        #apple/사과/1
        if line:
          #['apple','사과',1]
          data = line.strip().split('/')
          wordList.append(Word(data[0],data[1],data[2]))
        else:
            break
      print('데이터를 불러왔습니다')
class Menu:
  def __init__(self):
    self.wordService = WordService()

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

출력 예)

 

오늘은 지금까지 배운것들을 모두 종합해서 풀어야 하는 문제를 풀어보았다 너무 어려웠지만

먼저 생각 나는 코드부터 한줄 한줄씩 적어 나가며 지난 시간에 배워온 내용을 되짚으며 천천히 풀어 나갔다

한줄 한줄 적혀 나가는 코드를 보며 뿌듯하기도 하였으며, 더 많이 배워서 내가 아닌 다른 사용자가 이 프로그램을 실행시켜도 에러가 나지 않을 만큼의 완벽한 코드를 짜고 싶었다 정말 재밌고 뜻 깊은 하루였다. 😊💻

'인공지능 > 파이썬 기초' 카테고리의 다른 글

주피터 노트북(cmd)  (0) 2024.10.02
변수 타입 어노테이션  (4) 2024.10.02
파일 입출력  (0) 2024.10.02
파이썬 모듈  (0) 2024.10.01
파이썬의 예외 처리  (0) 2024.10.01