- 리스트
- 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. 단어장 만들기
잘 모르는 단어 네 개입니다.
- 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)을 리턴하는 거죠.
여러분이 해야 할 일은 두 가지입니다.
- sum_digit 함수를 작성한다.
- 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 |