[Python]전화번호부 만들기

파이썬을 이용하여 전화번호부를 만들어보자.(코드가 지저분하여 리팩토링을 해야하는데 언제할진 모르겠음)

import json

file_path = "../source/45-1.json"

def read_file():
    try:            
        with open(file_path, 'r') as f:
            json_string = f.read().replace("'", '"')
            result = json.loads(json_string)
            return result.values()
    except:
        with open(file_path, "w") as f:
            f.write("")
        return list()
    
def show_phones():
    phones = read_file()
    for phone in phones:
        print(f"Name = {phone.get('Name')}, Phone = {phone.get('Phone')}")
            
def write_file(data):
    with open(file_path, 'w') as f:
        json.dump(data, f)        
   
while True:
    print()
    print("=====================")
    print("1. 전화번호 조회")
    print("2. 전화번호 추가")
    print("3. 전화번호 삭제")
    print("4. 종료하기")
    print("=====================")
    
    menu = input("메뉴를 선택하세요 : ")
    
    if menu == "1":
        print()
        show_phones()
        
    elif menu == "2":
        print()
       
        name = input("추가할 이름을 입력하세요 : ")
        phone = ""
        while True:
            phone = input("추가할 전화번호를 입력하세요 : ")        
            if not all([i.isdigit() for i in phone]):
                print("전화번호는 숫자만 입력할 수 있습니다.")
                continue
            if len(phone) < 8:
                print("전화번호는 최소 8자리 이상 입력해야 합니다.")
                continue                
            break
        
        data = {"Name": name, "Phone": phone}

        phones = list(read_file())
        phones.append(data)
        write_file(dict(enumerate(phones)))
        
    elif menu == "3":
        print()
        name = input("삭제할 이름을 입력하세요 : ")
        phones = list(read_file())
        
        if not any([ p.get('Name') == name for p in phones]):
            print(f"존재하지 않는 이름입니다. = {name}")
            continue

        for phone in phones:
            if phone.get('Name') == name:
                phones.remove(phone)
                write_file(dict(enumerate(phones)))
                break

        
    elif menu == "4":
        print("프로그램을 종료합니다.")
        break


## 결과
=====================
1. 전화번호 조회
2. 전화번호 추가
3. 전화번호 삭제
4. 종료하기
=====================
메뉴를 선택하세요 : 1

Name = bbbb, Phone = 1111222233
Name = cccc, Phone = 111123123

=====================
1. 전화번호 조회
2. 전화번호 추가
3. 전화번호 삭제
4. 종료하기
=====================
메뉴를 선택하세요 : 2

추가할 이름을 입력하세요 : abc
추가할 전화번호를 입력하세요 : 1234
전화번호는 최소 8자리 이상 입력해야 합니다.
추가할 전화번호를 입력하세요 : 12345678

=====================
1. 전화번호 조회
2. 전화번호 추가
3. 전화번호 삭제
4. 종료하기
=====================
메뉴를 선택하세요 : 1

Name = bbbb, Phone = 1111222233
Name = cccc, Phone = 111123123
Name = abc, Phone = 12345678

=====================
1. 전화번호 조회
2. 전화번호 추가
3. 전화번호 삭제
4. 종료하기
=====================
메뉴를 선택하세요 : 3

삭제할 이름을 입력하세요 : abc

=====================
1. 전화번호 조회
2. 전화번호 추가
3. 전화번호 삭제
4. 종료하기
=====================
메뉴를 선택하세요 : 1

Name = bbbb, Phone = 1111222233
Name = cccc, Phone = 111123123

=====================
1. 전화번호 조회
2. 전화번호 추가
3. 전화번호 삭제
4. 종료하기
=====================
메뉴를 선택하세요 : 4
프로그램을 종료합니다.

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다