Python Basic

Dictionary(딕셔너리)로 전화번호부 CRUD: while Loop(반복문), - Python(파이썬)

cyberman 2020. 12. 9. 17:42

Dictionary를 이용해 CRUD 기능이 있는 전화번호부 만들기!

 

메뉴: 회원정보 추가(a), 검색(f), 수정(u), 삭제(d), 종료(x)
while Loop 활용: 별도의 명령이 있을 때까지 무한히 반복~

members = {}
while True:
    menu = input('회원정보 추가(a), 검색(f), 수정(u), 삭제(d), 목록(s), 종료(x): ')
    if menu=='a':
        name = input('이름 입력: ').title()
        phone = input('전화번호 입력: ')
        members[name] = phone
        print('----------')
        print(f'*****{name} 입력 완료*****')
        print(f'{name}:', phone)
        print('----------')

    elif menu=='f':
        name = input('검색할 이름 입력: ').title()
        phone = members.get(name, '존재하지 않습니다.')
        print('----------')
        print(f'{name}:', phone)
        print('----------')

    elif menu=='u':
        name = input('수정할 이름 입력: ').title()
        if name not in members.keys(): # members.keys(): key만 추출하기
            print('----------')
            print(f'{name} 회원은 존재하지 않습니다.')
            print('----------')
            continue # loop 계속 진행
        else:
            phone = input('새로운 전화번호 입력: ')
            members[name] = phone
            print('----------')
            print(f"*****{name} 수정 완료*****")
            print(f'{name}:', phone)
            print('----------')

    elif menu=='d':
        name = input('삭제할 이름 입력: ').title()
        if name not in members.keys():
            print('----------')
            print(f'{name} 회원은 존재하지 않습니다.')
            print('----------')
            continue
        else:
            ask = input(f"{name} 회원을 정말로 삭제할까요?(y): ").lower()
            if ask == 'y':
                del members[name]
                print('----------')
                print(f"*****{name} 삭제 완료*****")
                print('----------')
            else:
                print('----------')
                print(f'{name} 회원을 삭제하지 않았습니다.')
                print('----------')

    elif menu=='s':
        print('----------')
        for k, v in members.items(): # members.items(): key, value 추출하기
            print(f'{k}: {v}')
        print('----------')

    elif menu=='x':
        print('----------')
        print('프로그램을 종료합니다.')
        print('----------')
        break # loop 끝내기

 

검색 부분에서 쓰인 get 함수는 dictionary의 key를 부여하면 value가 리턴되는 기능으로, dict['key']와 같다. 

즉, members.get(name)members[name]와 같다고 보면 된다.

 

차이점이 있다면 members[name]은 name이라는 key가 존재하지 않는다면 오류를 띄우고 프로그램을 종료시키지만,

members.get(name)는 name이라는 key가 존재하지 않을 때 오류가 나지 않고 대신 None을 리턴한다.

 

또 key가 존재하지 않을 때 None 대신 미리 정해둔 값을 리턴하도록 다음과 같이 설정할 수 있다.

members.get(name, '존재하지 않습니다.')

name이라는 key가 없다면 '존재하지 않습니다.'가 리턴된다.

 

실행 예시

회원정보 추가(a), 검색(f), 수정(u), 삭제(d), 목록(s), 종료(x): a
이름 입력: David
전화번호 입력: 503-203-9495
----------
*****David 입력 완료*****
David: 503-203-9495
----------
회원정보 추가(a), 검색(f), 수정(u), 삭제(d), 목록(s), 종료(x): f
검색할 이름 입력: David
----------
David: 503-203-9495
----------
회원정보 추가(a), 검색(f), 수정(u), 삭제(d), 목록(s), 종료(x): u
수정할 이름 입력: david
새로운 전화번호 입력: 702-303-9283
----------
*****David 수정 완료*****
David: 702-303-9283
----------
회원정보 추가(a), 검색(f), 수정(u), 삭제(d), 목록(s), 종료(x): s
----------
David: 702-303-9283
----------
회원정보 추가(a), 검색(f), 수정(u), 삭제(d), 목록(s), 종료(x): d
삭제할 이름 입력: dave
----------
Dave 회원은 존재하지 않습니다.
----------
회원정보 추가(a), 검색(f), 수정(u), 삭제(d), 목록(s), 종료(x): x
----------
프로그램을 종료합니다.
----------

Process finished with exit code 0