본문 바로가기
Python/Python_basic

예제 : PhonBook 데이터 다루기(feat. Json 파일형식)

by Mr.DonyStark 2023. 11. 20.

□ PhoneBook Project

아래의 기능이 포함된 함수를 생성하기
 ○ 조건 1 : 전화번호부 확인 
 ○ 조건 2 : 전화번호 멤버 추가
 ○ 조건 3 : 전화번호부 멤버 삭제
 ○ 조건 4 : 프로그램 종류 
 ○ 조건 5 : 전화번호 전체 데이터는 아래와 같은 형식으로 작성
 ○ 조건 6 : 파일쓰기, 읽기 기능 추가

 활용함수

 ○ def 함수정의

 ○ 반복문(for/While문)

 ○ input() 함수

 ○ .split() 함수

 ○ 변수명[키값].get(value) → 아래 형식과 같이 딕셔너리 안에 키와 딕셔너리형태의 벨류로 구성되어 있는 경우

phoneBook = {
    0: {'Name' : 'Kim', 'Phone' : '78945612'},
    1: {'Name' : 'Lee', 'Phone' : '36485612'},
    2: {'Name' : 'Park', 'Phone' : '35715612'},
    3: {'Name' : 'Chung', 'Phone' : '02585612'},
    4: {'Name' : 'Choi', 'Phone' : '12345612'}
}

#조회 함수정의
def read_phoneBook(all_data):
    #폰북에 키값 및 키별 벨류 추출
    for pid in all_data:
        print('\nPID : ', pid +1) 
        for p_info in all_data[pid]:            #키별 벨류 반복하여 출력
            print(p_info + ':', all_data[pid][p_info])          
            
#삽입 함수정의
def add_phoneBook(all_data):
    #값 추가
    new_contact = input('성(영문/앞글자만 대문자), 번호 8자리 입력해주시고 구분은 ,로해주세요')
    if ',' in new_contact:         # , 구분을 통한 값입력을 받기위해 조건문 설정
        new_contact_Name = new_contact.split(',')[0] # 입력받은 값을 , 기준으로 앞에는 성으로 지정
        new_contact_Num = new_contact.split(',')[1]  # 입력받은 값을 , 기준으로 뒤에는 번호로 지정
        #중복방지를 위해 설정
        new_contact_Num_check = False    #새로운 번호 False 설정
        for pid in all_data:
            if new_contact_Num ==  all_data[pid].get('Phone'): #pid별 번호가 입력번호와 중복되면 True로 설정되며 True시 문구 출력
                new_contact_Num_check = True
        if new_contact_Num_check is True:
            print('\n 입력하신 번호가 중복됩니다.')
        else:
            all_data[len(all_data)] = {'Name' : new_contact_Name, 'Phone' : new_contact_Num}
            print(f'신규 연락처가 추가되었습니다.\n{new_contact_Name}\n{new_contact_Num}')
    elif ',' not in new_contact:
        print(',로 구분해주세요')

#삭제 함수
def del_phoneBokk(all_data):
    del_name = input('삭제하실 연락처 성을 기재하세요')
    for pid in all_data:
        if del_name == all_data[pid].get('Name'):   #키값(pid)에서의 .get() 함수로 벨류 
            del all_data[pid]
            print(f'\n{del_name}가 삭제되었습니다.')
            return all_data
    print('\n입력하신 성을 가진 연락처가 없습니다.')
    
        
#기능 분류 함수정의
def contact_point():

print('>>>>> 연락처 기능 <<<<<\n 1. 연락처 조회\n 2. 신규 연락처 추가\n 3. 연락처 삭제\n 4. 기능 종료\n=========================')
    
    #기능을 종료하기전까지 지속진행되도록 while True문 설정
    while True:
        choice_num = int(input('사용하실 기능을 선택해주세요*숫자 한자리 입력해주세요.'))
        #1번 선택
        if choice_num == 1:
            print('연락처 조회 기능을 선택하셨습니다.\n')
            read_phoneBook(phoneBook)
        #2번 선택        
        elif choice_num == 2:
            print('신규 연락처 추가를 선택하셨습니다. 연락처를 입력해주세요.\n')
            add_phoneBook(phoneBook)
              
        #3번 선택        
        elif choice_num == 3:
            print('연락처 삭제 기능을 선택하셨습니다.\n')
            del_phoneBokk(phoneBook)
        
        #4번 선택
        elif choice_num == 4:
            print('기능사용 종료를 선택하셨습니다. 다음에 또봐요')
            break
        #예외 처리
        else :
            print('\n 잘못된 번호를 기재하셨습니다.')

#함수실행
contact_point()

'Python > Python_basic' 카테고리의 다른 글

문자열 함수  (0) 2023.11.27
데이터 타입 + Input함수 예제  (1) 2023.11.27
예제 : 파일 C.R.U 기능 함수생성  (2) 2023.11.17
recursive 파일 확장자 별 처리 예제  (0) 2023.11.16
파일 확장자 별 처리 예제  (0) 2023.11.16