[강좌] 파이썬 훈련 07 - 주소록 만들기 4

주소록 프로그램에서 여러명의 데이터를 입력하려면 자료구조가 필요합니다. 자료구조는 여러개의 데이터를 효과적으로 쓸 수 있게 만들어놓은 도구입니다. 파이썬에서는 리스트, 세트, 튜플, 딕셔너리가 있습니다.

리스트 리스트는 데이터를 순서대로 일렬로 늘어트려서 저장할 수 있습니다. 여기서 중요한 포인트는 순서가 있다는 것과, 일렬로 저장한다는 것입니다. 그리고 프로그램이 실행되는 동안 추가, 수정, 삭제가 가능합니다.

세트 세트는 집합이라고 보시면 됩니다. 저장하는 순서가 없습니다. 교집합, 합집합등을 쉽게 구할 수 있습니다.

튜플 튜플은 리스트와 비슷하지만 리스트보다 속도가 빠르고, 가장 큰 차이점은 추가, 수정, 삭제가 안된다는 것입니다. 리스트를 생성한 뒤에 값이 변경되지 않기를 원한다면 튜플이 적격입니다.

딕셔너리 딕셔너리는 말 그대로 사전식으로 데이터를 저장할 수 있는 구조를 가지고 있습니다. 사전의 단어 - 뜻의 관계처럼 키 - 값의 관계를 가지고 있고, 검색할때도 순차적으로 찾아서 검색하는 방식이 아닌, 키값을 가지고, 특정 연산을 이용하여 바로 값을 찾아내는 방식이기때문에 검색속도가 상당히 빠르고, 데이터 양이 늘어난다고 해서 속도가 느려지지 않는 특징이 있습니다. 하지만 세트처럼 딕셔너리도 값의 순서를 가지지 않습니다. 

우리는 연락처들을 저장하는 자료구조로 추가, 수정, 삭제가 가능한 리스트를 선택해서 구현을 해보도록 하겠습니다. 그리고 이름, 나이, 이메일을 한세트로 이루는 튜플을 리스트에 넣어서 사용하는 구조로 만들어보겠습니다. 말이 좀 어려워보일 수 있지만 차근차근 살펴보면 절대 어렵지 않습니다. 

dataList = [
    ('유재석', '21', 'aaa@bbb.ccc'),
    ('강호동', '22', 'bbb@ccc.ddd'),
    ('김제동', '23', 'ccc@ddd.eee')
    ]

리스트는 위와 같이 작성하면 됩니다. 이름, 나이, 이메일이 하나의 튜플입니다. 그리고 리스트는 튜플들이 각각의 아이템입니다. 간략화 하여 표현해보면 dataList = [(...), (...), (...)] 이렇게 저장됩니다. 하지만 좀더 쉽게 일단 이름만 입력하고, 출력하는 코드를 짠 뒤에 위 리스트를 반영하여 확장시켜 보겠습니다.

nameList = ['유재석', '강호동', '김제동']

while True :
    print("================================")
    print("| 주소록 V.0.1                 |")
    print("================================")
    print("|  1. 추가                     |")
    print("|  2. 수정                     |")
    print("|  3. 삭제                     |")
    print("|  4. 출력                     |")
    print("|  5. 역출력                   |")
    print("|  0. 종료                     |")
    print("================================")
    n = int(input("메뉴 번호를 입력하세요 : "))
    if n == 0 :
        break
    elif n == 1 :
        name = input("이름을 입력하세요 : ")
        nameList.append(name)
    elif n == 2 :
        print("데이터 수정")
    elif n == 3 :
        print("데이터 삭제")
    elif n == 4 :
        for name in nameList:
            print("이름 : %s" % name)
    elif n == 5 :
        print("목록 거꾸로 출력")
    else :
        print("잘못 입력하셨습니다.")

1번 입력 부분에서 키보드로 이름을 입력받은 뒤 name 변수에 넣어줍니다. 그리고 nameList에 append() 함수를 이용하여 데이터 추가를 시켜줍니다. 그리고 4번 출력부분을 보시기 바랍니다. for문이 나왔습니다. for문은 특정 범위를 반복할때 사용합니다. "for 변수 in 리스트:" 구문으로 작성하고, 다음 라인에서 들여쓰기를 맞춰서 해당 변수를 출력해주면 됩니다. 다음 위 코드를 좀더 확장시켜서 위에서 말한 데이터를 반영시켜 보겠습니다.

dataList = [
    ('유재석', '21', 'aaa@bbb.ccc'),
    ('강호동', '22', 'bbb@ccc.ddd'),
    ('김제동', '23', 'ccc@ddd.eee')
    ]

while True :
    print("================================")
    print("| 주소록 V.0.1                 |")
    print("================================")
    print("|  1. 추가                     |")
    print("|  2. 수정                     |")
    print("|  3. 삭제                     |")
    print("|  4. 출력                     |")
    print("|  5. 역출력                   |")
    print("|  0. 종료                     |")
    print("================================")
    n = int(input("메뉴 번호를 입력하세요 : "))
    if n == 0 :
        break
    elif n == 1 :
        name = input("이름을 입력하세요 : ")
        age = input("나이를 입력하세요 : ")
        email = input("이메일 주소를 입력하세요 : ")
        dataList.append((name, age, email))
    elif n == 2 :
        print("데이터 수정")
    elif n == 3 :
        print("데이터 삭제")
    elif n == 4 :
        for name, age, email in dataList:
            print("이름 : %s" % name)
            print("나이 : %s" % age)
            print("E-Mail : %s" % email)
    elif n == 5 :
        print("목록 거꾸로 출력")
    else :
        print("잘못 입력하셨습니다.")

사실 파이썬 문법이 워낙 직관적이라 특별히 설명하지 않아도 '아~~!!'하시면서 이해하실 수 있으리라 생각됩니다. dataList 리스트에서 튜플을 하나씩 꺼내서 name, age, email 변수에 넣어주고, 각각의 변수를 출력하기를 반복합니다. 실행해 보시면 의도한 대로 출력되는 것을 확인할 수 있습니다.

다음 강좌 전까지 과제를 하나 내드리겠습니다. 위 소스는 동작은 하지만 볼품이 없습니다. 본인의 입맛에 맞게 깔끔하게 출력되도록 꾸며보시기 바랍니다. 그리고 값을 이것저것 바꿔보고, 가공해보시기 바랍니다. 리스트는 기능이 아주 많지만 모든 기능을 처음부터 다 알필요는 없습니다. 만들면서 하나씩 써보고, 익히면 저절로 잘 알게되니까 걱정하지 않으셔도 될것 같습니다.
[강좌] 파이썬 훈련 07 - 주소록 만들기 4 [강좌] 파이썬 훈련 07 - 주소록 만들기 4 Reviewed by Tae-seob Shin on 12월 02, 2018 Rating: 5

댓글 없음:

Powered by Blogger.