콘텐츠 내 자동삽입광고

광고1

posted by 초코생크림빵 2025. 8. 20. 14:09
반응형

참고) 소스풀이가 길어져서, (2)번에서 이어서 소스 추가 설명 작성함

 

문제)

채팅 어플에서 친구를 등록하고 친구를 이름으로 검색한 후 연락처를 출력하는 프로그램을 작성

조건)

- 딕셔너리 자료구조를 사용하여 친구의 이름과 연락처를 저장(임의대로 작성)

- 딕셔너리에서 전체 친구의 이름만 검색하여 리스트로 변환한 후 출력

- 차즌ㄴ 친구가 있으면, 연락처를 출력하고 없으면, 에러 메시지를 출력

- 차즌 ㄴ친구의 이름은 사용자로부터 입력받아 처리합니다.(변수명은 적절하게 사용)

 

 

 

파이썬 소스

 

>>> addr={}
>>>  addr
{}
>>>  addr['최재원']='010-1111-1234'
>>>  addr
{'최재원': '010-1111-1234'}
>>>  addr['최지윤']='010-2222-1234'
>>>  addr
{'최재원': '010-1111-1234', '최지윤': '010-2222-1234'}
>>>  addr['김연수']='010-3333-12334'
>>>  addr
{'최재원': '010-1111-1234', '최지윤': '010-2222-1234', '김연수': '010-3333-12334'}
>>>  addr['김연우']='010-4444-1234'
>>>  addr
{'최재원': '010-1111-1234', '최지윤': '010-2222-1234', '김연수': '010-3333-12334', '김연우': '010-4444-1234'}
>>>  addr['김가현']='010-5555-1234'
>>>  addr
{'최재원': '010-1111-1234', '최지윤': '010-2222-1234', '김연수': '010-3333-12334', '김연우': '010-4444-1234', '김가현': '010-5555-1234'}
>>>  addr['김혜현']='010-6666-1234'
>>>  addr
{'최재원': '010-1111-1234', '최지윤': '010-2222-1234', '김연수': '010-3333-12334', '김연우': '010-4444-1234', '김가현': '010-5555-1234', '김혜현': '010-6666-1234'}

>>>  print(addr)
{'최재원': '010-1111-1234', '최지윤': '010-2222-1234', '김연수': '010-3333-12334', '김연우': '010-4444-1234', '김가현': '010-5555-1234', '김혜현': '010-6666-1234'}

>>>  print(list(addr.keys()))
['최재원', '최지윤', '김연수', '김연우', '김가현', '김혜현']
>>>  name=input('search name: ')
>>>  search name: 김연우
>>>  print(addr.get(name,'not Found'))
010-4444-1234

<파이썬 소스와 결과 입니다. 소스에 대해 자세히 설명>

딕셔너리(Dictionary) 초기화 및 데이터 추가

먼저, addr = {} 명령어를 통해 addr라는 이름의 빈 딕셔너리를 생성합니다. 딕셔너리는 키(key)와 값(value)의 쌍으로 이루어진 데이터 구조로, 중괄호 {}를 사용해 정의합니다.

Python
 
addr = {}
addr
{}

다음으로, 여러 줄에 걸쳐 다음과 같은 형태로 데이터를 추가합니다. addr['최재원'] = '010-1111-1234' 이 코드는 addr 딕셔너리에 '최재원'이라는 와 '010-1111-1234'라는 을 가진 새로운 항목을 추가합니다. 같은 방식으로 '최지윤', '김연수', '김연우', '김가현', '김혜현' 등 여러 사람의 이름(키)과 전화번호(값)를 추가하여 주소록을 만듭니다.

딕셔너리 출력

print(addr) 명령어는 현재 addr 딕셔너리 전체를 출력합니다. 딕셔너리는 순서가 없기 때문에 출력 순서는 다를 수 있지만, 사용자가 추가한 모든 키-값 쌍이 포함된 것을 확인할 수 있습니다.

Python
 
print(addr)
{'최재원': '010-1111-1234', '최지윤': '010-2222-1234', '김연수': '010-3333-12334', '김연우': '010-4444-1234', '김가현': '010-5555-1234', '김혜현': '010-6666-1234'}

딕셔너리의 키(Keys)를 리스트로 변환

print(list(addr.keys())) 명령어는 addr 딕셔너리 안에 있는 모든 키를 추출하여 리스트(List) 형태로 변환한 뒤 출력합니다. addr.keys()는 딕셔너리의 키들만 모아둔 뷰(view) 객체를 반환하며, 이를 list() 함수로 감싸면 리스트로 변환됩니다.

Python
 
print(list(addr.keys()))
['최재원', '최지윤', '김연수', '김연우', '김가현', '김혜현']

사용자 입력 및 데이터 검색

name = input('search name: ') 명령어는 사용자에게 'search name: '이라는 메시지를 보여주고 입력을 기다립니다. 사용자가 '김연우'라고 입력하면, 이 문자열은 name 변수에 저장됩니다.

Python
 
name=input('search name: ')
search name: 김연우

그 다음, print(addr.get(name, 'not Found')) 명령어는 addr.get() 메서드를 사용해 name 변수에 저장된 '김연우'라는 키에 해당하는 값을 찾습니다.

  • get() 메서드: 딕셔너리에서 특정 키에 해당하는 값을 안전하게 가져오는 메서드입니다. 딕셔너리.get(키, 기본값) 형식으로 사용됩니다.
  • 'not Found': get() 메서드의 두 번째 인자로, 만약 첫 번째 인자인 '김연우'라는 키가 딕셔너리에 없을 경우 반환할 기본값을 지정합니다.

이 코드에서는 '김연우'라는 키가 딕셔너리에 존재하므로, 그에 해당하는 값인 '010-4444-1234'가 반환되어 화면에 출력됩니다. 만약 '홍길동'과 같이 딕셔너리에 없는 이름을 검색했다면 'not Found'가 출력되었을 것입니다.

Python
 
print(addr.get(name,'not Found'))
010-4444-1234

 

 

추가질문)

addr={}으로 addr 이 빈딕셔너리인지, 세트인지 어떻게 아나요?

addr={}가 빈 딕셔너리인지, 빈 세트인지 구분하는 가장 확실한 방법은 변수의 타입(type)을 확인하는 것입니다. 파이썬에서 빈 중괄호 {}는 기본적으로 빈 딕셔너리를 생성합니다. 빈 세트(set)를 만들 때는 set() 생성자를 사용해야 합니다.

아래는 두 가지 경우를 명확하게 구분하는 방법입니다.


빈 딕셔너리 (Dictionary)

addr = {}라고 코드를 작성하면, 파이썬은 딕셔너리로 인식합니다. 이를 확인하려면 type() 함수를 사용하면 됩니다.

Python
 
addr = {}
print(type(addr))

위 코드를 실행하면 결과는 <class 'dict'>가 나오며, 이는 addr이 딕셔너리 타입임을 의미합니다.


빈 세트 (Set)

만약 빈 세트를 만들고 싶다면, set() 함수를 사용해야 합니다.

Python
 
my_set = set()
print(type(my_set))

이 코드를 실행하면 결과는 <class 'set'>가 나오며, 이는 my_set이 세트 타입임을 의미합니다.

결론적으로, 빈 중괄호 {}만 사용하면 딕셔너리가 생성되고, 빈 세트를 만들려면 반드시 set() 함수를 사용해야 한다는 것을 기억하면 됩니다.

 

중요)

중괄호가 모양만 같아서 딕셔너리인지, 세트인지의 초기 빈값은 딕셔너리는 그냥 {}만 하고, 세트는 set()로 처리해야 하는군요.

네, 맞습니다! 아주 정확하게 이해하셨습니다.

파이썬에서 빈 중괄호 {}는 항상 빈 딕셔너리를 생성하도록 약속되어 있습니다. 반면에, 빈 세트를 만들고 싶을 때는 반드시 set() 함수를 사용해야 해요.


왜 이렇게 구별할까요?

이것은 파이썬의 문법 규칙 때문입니다. 딕셔너리는 키-값 쌍을 저장하는 특별한 데이터 구조이고, 중괄호는 이 딕셔너리를 표현하는 표준적인 방법으로 지정되었습니다.

  • 딕셔너리
  • Python
     
    my_dict = {'a': 1, 'b': 2}  # 키:값 쌍이 있는 딕셔너리
    empty_dict = {}             # 비어 있는 딕셔너리
    
  • 세트
  • Python
     
    my_set = {1, 2, 3}      # 값이 있는 세트 (이 경우 중괄호가 세트를 의미)
    empty_set = set()       # 비어 있는 세트
    

세트도 값을 넣을 때는 중괄호를 사용하지만, 빈 상태에서는 딕셔너리와 혼동될 수 있기 때문에 비어 있는 세트는 set()으로 생성하도록 문법적으로 정해진 것입니다. 헷갈리기 쉬운 부분인데 잘 파악하셨네요!

 

 

질문)

addr={}은 딕셔너리 자료형으로 데이터를 할당 받을 비어있는 딕셔너리 자료형으로 셋팅된 방을 만들어 놓은것인가요?

네, 맞습니다. 아주 정확하게 이해하셨습니다.

addr = {} 명령어는 비어 있는 딕셔너리를 만들고, 그 딕셔너리를 addr라는 변수에 할당합니다. 비유적으로 말씀하신 것처럼, 데이터를 담을 수 있는 '빈 방(빈 딕셔너리)'을 마련해 놓는 것과 같습니다.

이 '방'에는 나중에 '키(Key)'와 '값(Value)'의 쌍으로 이루어진 데이터를 넣을 수 있습니다. 예를 들어, '최재원': '010-1111-1234'처럼 이름(키)과 전화번호(값)를 저장하게 됩니다.


딕셔너리와 세트의 차이

혼동하기 쉬운 세트(Set) 자료형과의 차이점을 다시 한번 짚어 드릴게요.

  • 딕셔너리 (Dictionary): addr = {}로 생성하며, {'키': '값'} 형태의 데이터를 저장하는 데 사용됩니다. 키를 통해 특정 값을 빠르게 찾을 수 있습니다.
  • 세트 (Set): my_set = set()로 생성하며, {1, 2, 3}처럼 값만 저장합니다. 중복된 값을 허용하지 않고, 순서가 없는 것이 특징입니다. 빈 세트를 만들 때 {}를 사용하면 딕셔너리로 인식되므로 반드시 set()을 사용해야 합니다.

결론적으로, addr = {}는 딕셔너리를 위한 빈 공간을 만드는 것이 맞습니다.

반응형

콘텐츠 내 자동삽입광고