yooniiverse
개발 블로그
yooniiverse
전체 방문자
오늘
어제
  • 분류 전체보기
    • 운영체제
    • 네트워크
    • ~2023.02
      • 외부교육
      • 대외활동
      • 스터디
      • 동아리
      • TIL
      • IT지식
      • 기타
      • 트러블 슈팅
      • 프로그래밍
      • Python
      • Java
      • JS
      • DB(SQL)
      • JSP
      • Spring
      • 기술면접
      • 자바
      • 코딩테스트
      • 자료구조
      • 알고리즘
      • 백준 문제풀이
      • 인공지능
      • 머신러닝
      • 프로젝트
      • 안드로이드 앱개발
      • 웹개발
      • 웹 서비스
      • 웹퍼블리싱
      • Node.js 백엔드 개발
      • CS
      • 1일 1CS지식
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 정보처리기사
      • 도서 리뷰
      • 개발 관련 도서
      • 기타 도서

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yooniiverse

개발 블로그

~2023.02/Python

프로그래밍 기초 in Python _ [토픽3] 프로그래밍과 데이터 in Python _ 사전 & 파이썬 데이터의 비밀

2021. 9. 5. 23:36
- 리스트
- for 반복문
- 사전
- 파이썬 데이터의 비밀

 

사전
# 사전 (dictionary)
# key-value pair (키-값 쌍)
my_dictionary = {
    5: 25,
    2: 4,
    3: 9
}

print(my_dictionary[3])

my_dictionary[9] = 81
print(my_dictionary)
9

{5: 25, 2: 4, 3: 9, 9: 81}

사전의 키는 정수일 필요가 없다.

my_family = {
    '엄마': '김자옥'
    '아빠': '이석진'
    '아들': '이동민'
    '딸': '이지영'
}

print(my_family['아빠'])
이석진

 

실습과제: 영어 단어장

태호는 미국 다트머스 대학교 컴퓨터 과학과에 지원하려고 합니다. 컴퓨터 과학 전공으로 미국 유학을 가고 싶기 때문에, 코딩 공부와 영어 공부를 모두 해야 하는 상황인데요. 그 둘을 동시에 하기 위해서 파이썬으로 단어장 프로그램을 만들기로 합니다.

해야 할 일

  1. 단어장 만들기
  2. 새로운 단어들 추가

1. 단어장 만들기

잘 모르는 단어 네 개입니다.

  • sanitizer: 살균제
  • ambition: 야망
  • conscience: 양심
  • civilization: 문명

이 단어들을 저장하는 사전을 만들고, 만든 사전을 vocab라는 변수에 저장하세요. 단어와 뜻이 key-value로 들어가야 합니다.

2. 새로운 단어들 추가

이미 만들어진 vocab 사전에 새로운 단어들을 추가하고 싶습니다. 아래 단어들을 추가해 주세요.

  • privilege: 특권
  • principle: 원칙

실행 결과

 

{'sanitizer': '살균제', 'ambition': '야망', 'conscience': '양심', 'civilization': '문명'}
{'sanitizer': '살균제', 'ambition': '야망', 'conscience': '양심', 'civilization': '문명', 'privilege': '특권', 'principle': '원칙'}

# 1. 단어장 만들기
vocab = {
    # 코드를 입력하세요.
    'sanitizer': '살균제',
    'ambition': '야망',
    'conscience': '양심',
    'civilization': '문명'
}
print(vocab)


# 2. 새로운 단어들 추가
# 코드를 입력하세요.
vocab['privilege'] = '특권'
vocab['principle'] = '원칙'
print(vocab)

 

사전 활용법
my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}

print(my_family.values())
print('이지영' in my_family.values())
print('성태호' in my_family.values())

for value in my_family.values():
    print(value)
dict_values(['김자옥', '이석진', '이동민', '이지영'])
True
False

김자옥
이석진
이동민
이지영

my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}

print(my_family.keys())

for key in my_family.keys():
    print(key)
    
for key in my_family.keys():
    value = my_family[key]
    print(key, value)
    
for key, value in my_family.items():
    print(key, value)
dict_keys(['엄마', '아빠', '아들', '딸'])

엄마
아빠
아들
딸

엄마 김자옥
아빠 이석진
아들 이동민
딸 이지영

엄마 김자옥
아빠 이석진
아들 이동민
딸 이지영

 

실습과제: 사전 뒤집기

태호는 영어 단어 공부를 위해서 단어장 프로그램을 만들었습니다. 하지만 이번에는 영-한으로 공부하는 것이 아니라, 한-영으로 공부를 해 보고 싶습니다.

사전의 key와 value를 뒤집어 주는 함수 reverse_dict를 작성해 주세요. reverse_dict는 파라미터로 사전 dict를 받고, key와 value가 뒤집힌 새로운 사전을 리턴합니다.

실행 결과

# 언어 사전의 단어와 뜻을 서로 바꿔주는 함수
def reverse_dict(dict):
    new_dict = {}  # 새로운 사전
    
    # dict의 key와 value를 뒤집어서 new_dict에 저장
    # 코드를 입력하세요.
    
    return new_dict  # 변환한 새로운 사전 리턴


# 영-한 단어장
vocab = {
    'sanitizer': '살균제',
    'ambition': '야망',
    'conscience': '양심',
    'civilization': '문명',
    'privilege': '특권',
    'principles': '원칙'
}

# 기존 단어장 출력
print("영-한 단어장\n{}\n".format(vocab))

# 변환된 단어장 출력
reversed_vocab = reverse_dict(vocab)
print("한-영 단어장\n{}".format(reversed_vocab))

위 코드를 완성하고 실행하면 아래와 같이 출력됩니다.

영-한 단어장
{'sanitizer': '살균제', 'ambition': '야망', 'conscience': '양심', 'civilization': '문명', 'privilege': '특권', 'principles': '원칙'}

한-영 단어장
{'살균제': 'sanitizer', '야망': 'ambition', '양심': 'conscience', '문명': 'civilization', '특권': 'privilege', '원칙': 'principles'}

나의 답안 

# 언어 사전의 단어와 뜻을 서로 바꿔주는 함수
def reverse_dict(dict):
    new_dict = {}  # 새로운 사전
    
    # dict의 key와 value를 뒤집어서 new_dict에 저장
    # 코드를 입력하세요.
    for key, value in vocab.items():
        value = vocab[key]
        key = vocab[value]
    return new_dict  # 변환한 새로운 사전 리턴


# 영-한 단어장
vocab = {
    'sanitizer': '살균제',
    'ambition': '야망',
    'conscience': '양심',
    'civilization': '문명',
    'privilege': '특권',
    'principles': '원칙'
}

# 기존 단어장 출력
print("영-한 단어장\n{}\n".format(vocab))

# 변환된 단어장 출력
reversed_vocab = reverse_dict(vocab)
print("한-영 단어장\n{}".format(reversed_vocab))

모범 답안

# 언어 사전의 단어와 뜻을 서로 바꿔주는 함수
def reverse_dict(dict):
    new_dict = {}  # 새로운 사전
    
    # dict의 key와 value를 뒤집어서 new_dict에 저장
    for key, value in dict.items():
        new_dict[value] = key
    
    return new_dict  # 변환한 새로운 사전 리턴


# 영-한 단어장
vocab = {
    'sanitizer': '살균제',
    'ambition': '야망',
    'conscience': '양심',
    'civilization': '문명',
    'privilege': '특권',
    'principles': '원칙'
}

# 기존 단어장 출력
print("영-한 단어장\n{}\n".format(vocab))

# 변환된 단어장 출력
reversed_vocab = reverse_dict(vocab)
print("한-영 단어장\n{}".format(reversed_vocab))

 

실습과제: 투표 집계하기

 

Aliasing

 

 

리스트와 문자열 정리

리스트와 문자열은 굉장히 비슷하다. 리스트가 어떤 자료형들의 나열이라면, 문자열은 문자들의 나열이라고 할 수 있다.

지금부터 파이썬에서 리스트와 문자열이 어떻게 같고 어떻게 다른지 알아보자.

인덱싱(Indexing)

두 자료형은 공통적으로 인덱싱이 가능하다.

# 알파벳 리스트의 인덱싱
alphabets_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print(alphabets_list[0])
print(alphabets_list[1])
print(alphabets_list[4])
print(alphabets_list[-1])

# 알파벳 문자열의 인덱싱
alphabets_string = 'ABCDEFGHIJ')
print(alphabets_string[0])
print(alphabets_string[1])
print(alphabets_string[4])
print(alphabets_string[-1])
A
B
E
J
A
B
E
J

for 반복문

두 자료형은 공통적으로 인덱싱이 가능하다. 따라서 for반복문에도 활용할 수 있다.

# 알파벳 리스트의 반복문
alphabets_list = ['C', 'O', 'D', 'E', 'I', 'T']
for alphabet in alphabets_list:
    print(alphabet)
    
# 알파벳 문자열의 반복문
alphabets_string = 'CODEIT'
for alphabet in alphabets_string:
    print(alphabet)
C
O
D
E
I
T

C
O
D
E
I
T

슬라이싱(Slicing)

두 자료형은 공통적으로 슬라이싱이 가능하다.

# 알파벳 리스트의 슬라이싱
alphabets_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print(alphabets_list[0:5])
print(alphabets_list[4:])
print(alphabets_list[:4])

# 알파벳 문자열의 슬라이싱
alphabets_string = 'ABCDEFGHIJ'
print(alphabets_string[0:5])
print(alphabets_string[4:])
print(alphabets_string[:4])
['A', 'B', 'C', 'D', 'E']
['E', 'F', 'G', 'H', 'I', 'J']
['A', 'B', 'C', 'D']
ABCDE
EFGHIJ
ABCD

덧셈 연산

두 자료형에게 모두 덧셈은 "연결"하는 연산이다.

# 리스트의 덧셈 연산
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
list3 = list1 + list2
print(list3)

# 문자열의 덧셈 연산
string1 = '1234'
string2 = '5678'
string3 = string1 + string2
print(string3)
[1, 2, 3, 4, 5, 6, 7, 8]
12345678

len 함수

두 자료형은 모두 길이를 재는 len함수를 쓸 수 있다.

# 리스트의 길이 재기
print(len(['H', 'E', 'L', 'L', 'O']))

# 문자열의 길이 재기
print(len("Hello, world!"))
5
13

Mutable(수정 가능) vs. Immutable(수정 불가능)

하지만 차이점이 있다. 리스트는 데이터를 바꿀 수 있지만, 문자열은 데이터를 바꿀 수 없다는 것이다.

리스트와 같이 수정 가능한 자료형을 'mutable'한 자료형이라고 부르고, 문자열과 같이 수정 불가능한 자료형을 'immutable'한 자료형이라고 부른다. 숫자, 불린, 문자열은 모두 immutable한 자료형이다.

# 리스트 데이터 바꾸기
numbers = [1, 2, 3, 4]
numbers[0] = 5
print(numbers)
[5, 2, 3, 4]

리스트 numbers의 인덱스 0에서 5를 새롭게 지정해주었다. [5, 2, 3, 4]가 출력되었다. 이처럼 리스트는 데이터의 생성, 삭제, 수정이 가능하다.

# 문자열 데이터 바꾸기
name = "codeit"
name[0] = "C"
print(name)
Traceback (most recent call last):
  File "untitled.py", line 3, in <module>
    name[0] = "C"
TypeError: 'str' object does not support item assignment

문자열 name의 인덱스 0에 "C"를 새롭게 지정해주었더니 오류가 나왔다. 위는 문자열은 변형이 불가능하다는 메시지이다. 이처럼 문자열은 리스트와 달리 데이터의 생성, 삭제, 수정이 불가능하다.

 

실습과제: 자릿수 합 구하기

함수 sum_digit은 파라미터로 정수형 num을 받고, num의 각 자릿수를 더한 값을 리턴합니다.

예를 들어서 12의 각 자릿수는 1, 2이니까 sum_digit(12)는 3(1 + 2)을 리턴합니다.

마찬가지로 486의 각 자릿수는 4, 8, 6이니까 sum_digit(486)은 18(4 + 8 + 6)을 리턴하는 거죠.

여러분이 해야 할 일은 두 가지입니다.

  1. sum_digit 함수를 작성한다.
  2. sum_digit(1)부터 sum_digit(1000)까지의 합을 구해서 출력한다.

실행 결과

13501

 

'~2023.02 > Python' 카테고리의 다른 글

프로그래밍 기초 in Python _ [토픽4] 파이썬 응용하기 _ 파이썬 모듈 맛보기 & 사용자 입력 받기  (0) 2021.09.17
프로그래밍 기초 in Python _ [토픽3] 프로그래밍과 데이터 in Python _ 리스트 & for 반복문  (0) 2021.09.04
프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 제어문  (0) 2021.09.03
프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 추상화  (0) 2021.09.03
프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 자료형  (0) 2021.09.03
    '~2023.02/Python' 카테고리의 다른 글
    • 프로그래밍 기초 in Python _ [토픽4] 파이썬 응용하기 _ 파이썬 모듈 맛보기 & 사용자 입력 받기
    • 프로그래밍 기초 in Python _ [토픽3] 프로그래밍과 데이터 in Python _ 리스트 & for 반복문
    • 프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 제어문
    • 프로그래밍 기초 in Python _ [토픽2] 프로그래밍 핵심 개념 in Python _ 추상화
    yooniiverse
    yooniiverse

    티스토리툴바