Language/Python

[Python] 파일입출력을 이용한 영어사전 만들기

공부좀하시졍 2022. 1. 17. 11:16

사용자로부터 영단어와 뜻을 입력 받아 영어사전을 만드는 프로그램

 

1. 제작한 사전은 파일로 저장한다.

2. 저장된 파일을 읽어와 사용자가 입력하는 단어에 대해 뜻을 출력한다.

3. 이미 존재하는 단어는 사전에 추가되지 않는다.

4. 이때 사전 형태는 '영어단어 : 뜻' 으로 이루어진다.

 

English_Dictionary.py

import sys
sys.path.append('--추가할 경로--')

from make_dic import *
from print_dic import *

def start():

    while True:
        print("---------- 영어 사전 제작 start! ----------")
        print("|                                         |")
        print("|           1. 영단어 입력                |")
        print("|           2. 영단어 출력                |")
        print("|           3.    종료                    |")
        print("|                                         |")
        print("-------------------------------------------")

        n = int(input("번호를 선택해주세요. : "))
        if n == 1:
            make_dic()
        elif n == 2:
            print_dic()
        elif n == 3:
            print("프로그램을 종료합니다!")
            break
        else:
            print("다시 입력해주세요! (1~3 입력가능합니다.)")

start()

위 파일은 start() 함수를 호출하면서 프로그램 시작을 알리는 메뉴를 출력한다.

 

make_dic.py

def check():
    # 파일 읽어오기
    with open('dictionary.txt', 'r') as f:
        dic = f.read()

    if dic:
        dic_list = dic.split('\n')

        english = []
        korean = []
        ek_dic = {} # 빈 딕셔너리 생성

        for i in range(len(dic_list)):
            if dic_list[i] == '':
                dic_list.remove('')
                continue
            english.append(dic_list[i].split(' : ')[0])
            korean.append(dic_list[i].split(' : ')[1])
            ek_dic[english[i]] = korean[i]
        return ek_dic
    else:
        ek_dic = {}
        return ek_dic

def make_dic():
    ek_dic = check()

    print("등록하고 싶은 영단어와 뜻을 입력해주세요!")
    while True:
        # 사용자에게 영단어를 입력받기
        eng = input("\n 영어단어 등록(종료는 0) : ")

        if eng == '0':
            break
        elif eng not in ek_dic:  # 입력된 단어가 딕셔너리에 없으면
            # 뜻 입력받기
            kor = input("%s의 뜻 입력 : " % eng)
            ek_dic[eng] = kor
            data = eng + " : " + kor
            store_word(data)
        else:  # exit도 아니고 입력된 영단어가 딕셔너리에 있으면
            print("%s는 이미 등록된 단어 입니다." % eng)

    print("단어등록이 완료되었습니다.")
    print()
    return ek_dic

def store_word(data):
    with open('dictionary.txt', 'a') as dic_f:
        dic_f.write(data + "\n")

- check() 함수는  파일을 읽어와 ek_dic이라는 딕셔너리를 구성한다. 이때, 읽어온 파일이 비어있으면 빈 딕셔너리가 생성된다.

- make_dic() 함수는 등록할 영단어와 뜻을 입력하는 함수다. 이때, 입력된 단어가 딕셔너리(ek_dic)에 없을 경우에만 사전에 추가된다.

- sotre_word() 함수는 파일에 입력받은 단어를 저장하는 함수이다.

 

print_dic.py

def print_dic():
    while True:
        search = input("뜻이 궁금한 영단어를 입력해주세요! (종료는 0) : ")

        if search == '0':
            break

        ans = find(search)
        if ans == '':
            continue

        ans = find(search).strip()
        print("입력하신 '%s'의 뜻은 '%s' 입니다." % (search, ans))
        print()

def find(s) :
    with open('dictionary.txt', 'r') as f:
        lines = f.readlines()

    for line in lines:
        if s in line:
            kor = line.split(':')[1]
            return kor

    print("입력해주신 단어가 사전에 없습니다.")
    print()
    kor = ''
    return kor

- print_dic() 함수는 입력한 영단어에 대한 뜻을 출력하는 함수다. 

- find() 함수는 입력받은 영단어에 대한 뜻을 찾는 함수다. 이때, 사전에 없는 단어는 이를 알리는 출력문을 실행시킨다.