7단원 '딕셔너리와 집합'의 다섯 레슨에서 9문제를 내고, 2단원과 6단원에서 3문제를 섞었습니다. 앞 단원 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 출력을 쓰는 문제는 빈칸과 줄바꿈까지 종이에 끝까지 쓴 뒤 정답을 펼치세요. 리스트와 딕셔너리는 파이썬이 찍는 꼴 그대로(쉼표와 콜론 뒤 빈칸 · 작은따옴표) 씁니다. 줄 수를 알려 주지 않는 문제는 마지막 줄까지 다 씁니다. 막히면 정답 앞의 힌트를 먼저 펼칩니다. 점수는 매기지 않습니다.
한 번에 다 풀 필요는 없습니다. 문제 1~10은 폰으로도 풀 수 있고(약 30~40분), 끝의 만들어 보기 둘은 컴퓨터에서 직접 돌려 봅니다. 이 단원을 건너뛰어도 되는지 보려면 문제 1 · 3 · 5 · 7 · 8 다섯을 먼저 풀어 보세요(약 15분). 건너뛸지 볼 때는 힌트를 펴지 않고 풉니다. 힌트를 펴고 맞힌 문제나 짐작으로 고른 문제는 틀린 것으로 치고 그 레슨을 봅니다. 모두 맞으면 이 단원 레슨은 건너뛰고, 틀린 문제가 있으면 그 정답 끝의 레슨만 봅니다. 끝의 만들어 보기 둘은 골라서 풉니다.
끝의 두 문제는 프로그램을 직접 만들어 봅니다. 컴퓨터가 있으면 저장해 돌려 맞춰 보고, 폰으로만 본다면 문제에 적힌 값으로 내 코드를 한 줄씩 따라가 나와야 할 화면과 맞춰 봅니다. 실행 결과는 모두 파이썬 3.15로 돌린 것입니다.
문제 1
도서관에서 장르마다 빌려 간 책 수를 딕셔너리에 적습니다. 무엇이 찍힐까요? 마지막 줄까지 쓰고, 오류가 난다고 보면 찍히는 줄 다음에 오류 이름을 쓰세요.
books = {'소설': 2, '시집': 1}
books['소설'] = 3
books['만화'] = 4
key = '잡지'
print(len(books))
print(books.get(key, 0))
print(books[key])
힌트
2번 줄과 3번 줄의 키가 1번 줄 딕셔너리에 이미 있는지 가리고, 6번 줄과 7번 줄이 키 '잡지'를 어떻게 꺼내는지 견줘 보세요.
정답
3과 0을 찍은 뒤 7번 줄에서 KeyError로 멈춥니다.
30Traceback (most recent call last): File "main.py", line 7, in <module> print(books[key]) ~~~~~^^^^^KeyError: '잡지'2번 줄의 '소설'은 이미 있는 키라 값만 3으로 바뀌고, 3번 줄의 '만화'는 없던 키라 쌍이 하나 늘어 셋이 됩니다. 6번 줄 get()은 키 '잡지'가 없어 기본값 0을 돌려주고, 7번 줄은 대괄호로 없는 키를 꺼내다 멈춥니다. 맨 아래 줄은 그런 키가 없다는 뜻이고, 찾던 키 '잡지'를 함께 찍습니다.
- 첫 줄을 4로 쓰면 이미 있는 키에 다시 담아도 쌍이 는다고 본 것입니다. 키는 한 딕셔너리 안에 하나뿐이라 값만 바뀝니다(규칙 3).
- 7번 줄도
0이나None을 찍는다고 쓰면 대괄호로 꺼내도get()처럼 멈추지 않는다고 본 것입니다. 없는 키를 대괄호로 꺼내면KeyError로 멈춥니다.
다시 볼 레슨: 딕셔너리: 키로 찾기
문제 2
메뉴판의 커피 가격으로 두 잔 값과 샷 추가 값을 셈합니다. 이 코드를 실행하면 어떻게 될까요? 알맞은 것을 고르세요.
menu = {'커피': '4000'}
price = menu['커피']
print(price * 2)
print(price + 500)
- ① 3번 줄이
8000을, 4번 줄이4500을 찍고 끝난다 - ② 3번 줄이
40004000을, 4번 줄이4000500을 찍고 끝난다 - ③
40004000을 찍은 뒤 4번 줄에서TypeError로 멈춘다
힌트
1번 줄에서 키 '커피'와 한 쌍인 값이 어떤 종류인지 먼저 보세요.
정답
③ — 실행 결과는 이렇습니다.
40004000Traceback (most recent call last): File "main.py", line 4, in <module> print(price + 500) ~~~~~~^~~~~TypeError: can only concatenate str (not "int") to str1번 줄의 가격은 따옴표 안에 적은 글자 '4000'이고, 2번 줄은 그 글자에 이름 price를 붙입니다. 3번 줄의 *는 글자를 두 번 되풀이해 이어 40004000을 찍고, 4번 줄은 글자에 수 500을 이으려다 멈춥니다. 맨 아래 줄은 '문자열(str)에는 문자열만 이을 수 있다, int는 안 된다'는 뜻입니다.
- ① 따옴표 안의 4000도 수로 셈한다고 봤습니다(문자열과 수를 가리지 않는 생각). 수로 셈하려면
int(price)로 수를 만들거나, 딕셔너리에 따옴표 없이 4000을 담습니다. - ② 글자에 수를 이으면 수가 글자로 맞춰진다고 봤습니다. 파이썬은 글자와 수 사이에서 종류를 저절로 맞춰 주지 않습니다.
다시 볼 레슨: 수와 글자 · 문자열 잇기와 되풀이 · 딕셔너리: 키로 찾기
문제 3
과목마다 공부한 시간(분)을 적었습니다. 무엇이 찍힐까요? 마지막 줄까지 쓰고, 오류가 난다고 보면 찍히는 줄 다음에 오류 이름을 쓰세요.
study = {
'수학': 50,
'국어': 30,
'영어': 20,
}
total = 0
for name in study:
total = total + study[name]
print(name, total)
힌트
7번 줄이 바퀴마다 name을 무엇에 붙이는지 먼저 적고, 8번 줄의 study[name]이 무엇을 꺼내는지 보세요.
정답
모두 3줄입니다.
수학 50
국어 80
영어 100바퀴마다 한 줄로 줄인 추적 표입니다.
| 바퀴 | name | study[name] | total | 출력 |
|---|---|---|---|---|
| 1 | '수학' | 50 | 50 | 수학 50 |
| 2 | '국어' | 30 | 80 | 국어 80 |
| 3 | '영어' | 20 | 100 | 영어 100 |
for는 딕셔너리에서 키를 담은 차례대로 하나씩 꺼내 name을 붙이고, study[name]이 그 키의 값을 꺼냅니다(규칙 4).
- 첫 줄을
국어 30으로 시작하면 키가 가나다 차례로 나온다고 본 것입니다. 딕셔너리는 키를 담은 차례를 지킵니다. KeyError로 멈춘다고 쓰면 name이 값 50에 붙는다고 본 것입니다. 그러면study[50]을 찾는 셈이지만,for가 꺼내는 것은 키입니다.
다시 볼 레슨: 딕셔너리 돌기
문제 4
메뉴판 딕셔너리의 메뉴 이름을 가나다 차례로 놓습니다. 무엇이 찍힐까요? 두 줄을 글자 그대로 쓰세요.
menu = {'커피': 4000, '빵': 3000}
names = sorted(menu)
names.append('녹차')
done = names.sort()
print(names)
print(done)
힌트
2번 줄의 sorted(menu)가 무엇을 담은 리스트를 돌려주는지 적고, 4번 줄 뒤 names와 done이 각각 무엇을 가리키는지 그려 봅니다.
정답
['녹차', '빵', '커피']
None2번 줄 sorted(menu)는 딕셔너리의 키를 정렬한 새 리스트 ['빵', '커피']를 돌려줍니다. 3번 줄이 그 끝에 '녹차'를 더하고, 4번 줄 names.sort()는 names가 가리키는 리스트를 제자리에서 정렬한 뒤 None을 돌려줘 done이 None에 붙습니다.
- 첫 줄을
['빵', '커피', '녹차'], 둘째 줄을['녹차', '빵', '커피']로 쓰면.sort()도sorted()처럼 정렬한 새 리스트를 돌려준다고 본 것입니다..sort()는 같은 리스트를 제자리에서 바꾸고None을 돌려줍니다(규칙 3). - 2번 줄이 가격을 정렬한다고 보면 3번 줄 뒤 수와 글자가 섞여 4번 줄에서
TypeError가 납니다. 딕셔너리를 넘기면 키가 나옵니다.
다시 볼 레슨: 정렬: sort와 sorted · 딕셔너리 돌기
문제 5
주문이 들어온 요일을 적은 리스트에서, 요일마다 주문이 몇 건인지 셉니다. 2번 하위 목표를 통째로 채우세요. 다 채운 코드는 {'월': 2, '화': 1, '수': 1}을 찍어야 하고, 1번 줄을 days = ['금']으로 바꾸면 {'금': 1}을 찍어야 합니다.
days = ['월', '화', '월', '수']
# 1. 빈 딕셔너리
sold = {}
# 2. 하나씩 꺼내 칸 올리기
# 3. 끝나고 쓰기
print(sold)
힌트
2번 하위 목표는 for 줄과 그 몸 두 줄, 모두 세 줄입니다. 바퀴마다 그 요일의 칸이 지금 몇인지부터 꺼내 봅니다.
정답
모범 답입니다.
days = ['월', '화', '월', '수']
# 1. 빈 딕셔너리
sold = {}
# 2. 하나씩 꺼내 칸 올리기
for day in days:
before = sold.get(day, 0)
sold[day] = before + 1
# 3. 끝나고 쓰기
print(sold){'월': 2, '화': 1, '수': 1}바퀴마다 한 줄로 줄인 추적 표입니다.
| 바퀴 | day | before | 7번 줄 뒤 sold |
|---|---|---|---|
| 1 | '월' | 0 | {'월': 1} |
| 2 | '화' | 0 | {'월': 1, '화': 1} |
| 3 | '월' | 1 | {'월': 2, '화': 1} |
| 4 | '수' | 0 | {'월': 2, '화': 1, '수': 1} |
처음 보는 요일은 키가 없어 get()이 기본값 0을 돌려주므로 칸이 1로 생깁니다. ['금']이면 '금'의 칸이 0에서 1로 생겨 {'금': 1}입니다.
- 다르게 써도 되는 곳: 걸음꾼 이름은 다른 낱말이어도 됩니다. 6·7번 줄을
get()이 돌려준 값에 1을 더하는 한 줄로 합쳐도 되고,if day in sold:로 처음 보는 요일인지 갈라 써도 됩니다. - 흔한 오답은 6·7번 줄 대신
sold[day] += 1을 쓰는 것입니다. 첫 요일 '월'은 아직 키가 없어KeyError로 멈춥니다. 칸에 1을 담기만 하면{'월': 1, '화': 1, '수': 1}이 찍힙니다. 빈칸에 나와야 할 딕셔너리를 바로 써도 첫 값은 같지만, 둘째 값에서{'금': 1}이 나오지 않습니다.
다시 볼 레슨: 세기: 메뉴별로 모으기 · 딕셔너리: 키로 찾기
문제 6
하고 싶은 일마다 쓸 이름이나 꼴을 하나씩 쓰세요. 넷 다 쓴 뒤 정답을 펼치세요.
- (가) 없는 키로 꺼내도 멈추지 않고, 정해 둔 값을 돌려받는 메서드
- (나) 키와 값을 한 쌍씩 내주어,
for머리에 이름 둘을 쓰게 하는 메서드 - (다) 아무것도 담지 않은 집합을 만드는 꼴
- (라) 두 집합에 다 있는 값만 모으는 기호
힌트
(가)·(나)는 딕셔너리 뒤에 점을 찍어 부르는 메서드이고, (다)·(라)는 집합에 쓰는 꼴과 기호입니다.
정답
받는 답: (가) get · (나) items · (다) set() · (라) &
- 같은 답으로 치는 꼴: 괄호까지 쓴
get()·items(), 값까지 넣은menu.get('빙수', 0). - 틀리는 꼴 대괄호로 꺼내기(
menu['빙수']) — (가)에: 없는 키를 대괄호로 꺼내면KeyError로 멈춥니다. - 틀리는 꼴
{}— (다)에: 중괄호만 쓴{}는 빈 딕셔너리입니다. - 틀리는 꼴
|— (라)에:|는 어느 한쪽에라도 있는 값을 모두 모으는 합집합입니다.
다시 볼 레슨: 딕셔너리: 키로 찾기 · 딕셔너리 돌기 · 집합: 겹치지 않게 모으기
문제 7
동아리 모임에 이틀 동안 온 사람을 적었습니다. 월요일은 온 차례대로 리스트에, 화요일은 집합에 담았습니다. 무엇이 찍힐까요? 세 줄을 글자 그대로 쓰세요.
mon = ['하준', '소윤', '하준']
tue = {'소윤', '지호'}
came = set(mon)
print(len(came), '지호' in came)
print(sorted(came - tue))
print(sorted(came | tue))
힌트
3번 줄 뒤 came에 든 값을 먼저 적고, 두 집합을 견줘 봅니다.
정답
2 False
['하준']
['소윤', '지호', '하준']3번 줄 set(mon)은 두 번 적힌 '하준'을 하나로 합쳐, came에는 '하준'과 '소윤' 둘만 듭니다. '지호'는 화요일에만 와서 '지호' in came은 False입니다. came - tue는 came에만 있는 '하준'을, came | tue는 어느 날이든 온 셋을 모읍니다. 집합은 차례가 없어 sorted()로 가나다 차례 리스트를 만들어 찍었습니다.
- 첫 줄을
3 False로 쓰면 집합에도 겹친 값이 그대로 남는다고 본 것입니다. 집합은 같은 값을 한 번만 담습니다. - 둘째 줄을
['지호', '하준']으로 쓰면-가 한쪽에만 있는 값을 양쪽에서 다 모은다고 본 것입니다.-는 왼쪽 집합에만 있는 값을 남깁니다.
다시 볼 레슨: 집합: 겹치지 않게 모으기
문제 8
주문마다 한 잔씩 더 주기 전에, 처음 주문을 saved에 복사해 두었습니다. 무엇이 찍힐까요? 한 줄을 글자 그대로 쓰세요.
today = [{'qty': 1}, {'qty': 2}]
saved = today.copy()
for order in today:
order['qty'] += 1
print(saved)
힌트
2번 줄 뒤 today와 saved의 칸이 각각 어느 딕셔너리를 가리키는지 이름표로 그려 보고, 3번 줄의 order가 무엇에 붙는지 봅니다.
정답
[{'qty': 2}, {'qty': 3}]바퀴마다 한 줄로 줄인 추적 표입니다.
| 바퀴 | order가 붙은 딕셔너리 | 4번 줄 뒤 그 딕셔너리 |
|---|---|---|
| 1 | today의 0번 칸 = saved의 0번 칸 | {'qty': 2} |
| 2 | today의 1번 칸 = saved의 1번 칸 | {'qty': 3} |
2번 줄 today.copy()는 바깥 리스트만 새로 만들고, 새 리스트의 칸도 같은 딕셔너리 둘을 가리킵니다. 3번 줄의 order는 바퀴마다 칸이 가리키는 딕셔너리 그 자체에 붙고, 4번 줄이 그 딕셔너리의 수량을 1 올립니다. order['qty'] += 1은 지금 수량에 1을 더해 같은 키에 다시 담습니다. saved의 칸도 같은 딕셔너리를 가리켜 바뀐 수량이 보입니다(규칙 3).
- 흔한 오답은
[{'qty': 1}, {'qty': 2}]입니다.copy()가 안쪽 딕셔너리까지 새로 만든다고 본 것입니다(복사된다는 생각). 새로 생기는 것은 바깥 리스트뿐입니다. [{'qty':2}, {'qty':3}]처럼 콜론 뒤 빈칸만 빠뜨렸다면, 값은 맞게 따라갔고 파이썬은 콜론과 쉼표 뒤에 빈칸 하나를 넣어 찍습니다.
다시 볼 레슨: 리스트 안의 딕셔너리 · 리스트 복사: copy와 이름 더 붙이기
문제 9
카페 마감 때 할 일 목록입니다. 무엇이 찍힐까요? 마지막 줄까지 글자 그대로 쓰세요.
todo = ['청소', '발주']
week = todo
week.append('정산')
for job in todo:
print(job)
힌트
2번 줄 뒤 todo와 week가 각각 어느 리스트를 가리키는지 그리고, 4번 줄이 어느 리스트를 도는지 봅니다.
정답
모두 3줄입니다.
청소
발주
정산| 바퀴 | job | 출력 |
|---|---|---|
| 1 | '청소' | 청소 |
| 2 | '발주' | 발주 |
| 3 | '정산' | 정산 |
2번 줄 week = todo는 새 리스트를 만들지 않고, todo가 가리키는 리스트에 이름 week를 하나 더 붙입니다. 3번 줄이 그 리스트 끝에 '정산'을 더하니, 4번 줄에서 todo로 돌아도 값 셋을 꺼냅니다(규칙 3).
흔한 오답은 청소와 발주 두 줄만 쓰는 것입니다. week가 사본을 받아 todo는 그대로라고 본 것입니다(복사된다는 생각). 따로 두려면 week = todo.copy()로 씁니다.
다시 볼 레슨: 리스트와 이름 둘 · 리스트 복사: copy와 이름 더 붙이기
문제 10
메뉴 이름과 가격을 튜플로 적은 리스트에서 메뉴판 딕셔너리를 만들려 합니다. 이렇게 나와야 합니다.
{'커피': 4000, '라테': 4500}
메뉴가 하나일 때는 맞게 찍혔는데, 둘이 되자 아래처럼 하나만 찍힙니다. 몇 번 줄을 어떻게 고쳐야 할까요?
pairs = [
('커피', 4000),
('라테', 4500),
]
for name, price in pairs:
menu = {}
menu[name] = price
print(menu)
{'라테': 4500}힌트
바퀴마다 6번 줄이 실행된 뒤 menu가 어느 딕셔너리를 가리키는지 추적 표에 적어 봅니다.
정답
6번 줄 menu = {}를 반복 앞으로 옮겨, 5번 줄 위에 들여쓰기 없이 씁니다.
pairs = [
('커피', 4000),
('라테', 4500),
]
menu = {}
for name, price in pairs:
menu[name] = price
print(menu){'커피': 4000, '라테': 4500}고치기 전 코드를 바퀴마다 한 줄로 줄인 추적 표입니다. 6번 줄이 처음 어긋나는 줄입니다.
| 바퀴 | name·price | 6번 줄 | 7번 줄 뒤 menu |
|---|---|---|---|
| 1 | '커피'·4000 | menu를 새 빈 딕셔너리에 붙임 | {'커피': 4000} |
| 2 | '라테'·4500 | menu를 또 새 빈 딕셔너리에 붙임 | {'라테': 4500} |
| 반복 뒤(8번 줄) | 출력 {'라테': 4500} |
6번 줄은 덩어리 안이라 바퀴마다 실행되어, menu를 새 빈 딕셔너리에 다시 붙입니다(규칙 4). 첫 바퀴에 담은 커피는 아무도 가리키지 않는 딕셔너리에 남습니다. 메뉴가 하나뿐이면 바퀴도 하나라 이 차이가 드러나지 않았습니다.
- 다르게 고쳐도 되는 곳:
menu = {}를 1번 줄 위에 두어도 반복 앞이라 같습니다. - 흔한 오답은 6번 줄을 지우기만 하는 것입니다. menu를 붙인 적이 없어 7번 줄에서
NameError로 멈춥니다. 8번 줄을 4칸 들여 반복 안에서 찍으면{'커피': 4000}과{'라테': 4500}이 따로 찍힙니다. 딕셔너리는 여전히 바퀴마다 새로 생깁니다.
다시 볼 레슨: 딕셔너리: 키로 찾기 · 세기: 메뉴별로 모으기 · 튜플: 묶고 풀기
문제 11 (만들어 보기)
메뉴별 판매 수를 모으는 프로그램을 만들어 봅니다. 주문마다 메뉴와 잔 수를 튜플로 적었고, 메뉴마다 팔린 잔 수를 딕셔너리에 모아 찍습니다. 이렇게 나와야 합니다.
{'커피': 2, '라테': 1}
orders를 [('커피', 2), ('커피', 3)]으로 바꾸면 이렇게 나와야 합니다.
{'커피': 5}
아래 뼈대에서 1~5번 줄은 그대로 두고, 주석 셋 아래를 채우세요. 다 쓰면 둘째 값으로도 따라가 봅니다.
orders = [
('커피', 1),
('라테', 1),
('커피', 1),
]
# 1. 빈 딕셔너리
# 2. 하나씩 꺼내 칸 올리기
# 3. 끝나고 쓰기
처음 펼 때 약 6MB를 받습니다.
파이썬 3.14. Tab을 누르면 다음 단추나 칸으로 갑니다. 들여쓰기는 빈칸 네 개입니다. Enter는 앞줄 들여쓰기를 잇고, 콜론 뒤에서는 한 단계 더 들여 씁니다. Ctrl+Enter로 실행합니다.
견줄 시험 값
'실행'을 누르면 여기에 나옵니다.
여기서 쓴 코드 · 내 예상은 저장하지도 운영자에게 보내지도 않습니다. 페이지를 새로 열면 처음 코드입니다.
힌트
for 머리에 이름 둘을 쓰면 튜플을 풀어 메뉴와 잔 수를 함께 꺼냅니다. 둘째 값에서 커피 칸이 2와 3을 받아 몇이 되는지 보세요.
정답
모범 답입니다.
orders = [
('커피', 1),
('라테', 1),
('커피', 1),
]
# 1. 빈 딕셔너리
sold = {}
# 2. 하나씩 꺼내 칸 올리기
for item, n in orders:
now = sold.get(item, 0)
sold[item] = now + n
# 3. 끝나고 쓰기
print(sold){'커피': 2, '라테': 1}둘째 값이면 첫 주문에서 '커피' 칸이 0 + 2로 생기고, 둘째 주문에서 2 + 3이 되어 {'커피': 5}입니다.
- 다르게 써도 되는 곳: now 대신 before처럼 다른 이름을 써도 됩니다. 10·11번 줄을
get()이 돌려준 값에 n을 더하는 한 줄로 합쳐도 되고,if item in sold:로 처음 보는 메뉴인지 갈라 써도 됩니다. - 찍은 화면이 위와 같고 둘째 값에서도
{'커피': 5}가 나오면 맞습니다. - 흔한 오답은 주문 수를 세듯
now + 1로 올리는 것입니다. 첫 값은 잔 수가 모두 1이라 같지만, 둘째 값에서는 잔 수를 버리고{'커피': 2}가 찍힙니다.sold[item] = n으로 담기만 하면 같은 메뉴의 잔 수가 쌓이지 않고 덮여 첫 값에서{'커피': 1, '라테': 1}이 찍힙니다. 처음 보는 메뉴에sold[item] += n을 하면KeyError로 멈추고,sold = {}를 반복 안에 두면{'커피': 1}만 남습니다.
다시 볼 레슨: 세기: 메뉴별로 모으기 · 튜플: 묶고 풀기
문제 12 (만들어 보기)
이번에는 빈 데서 씁니다. 반에서 간식 투표를 했습니다. 표를 적은 리스트에서 간식마다 몇 표인지 세어 딕셔너리로 찍는 프로그램을 쓰세요. 이렇게 나와야 합니다.
{'사과': 2, '배': 1}
votes를 ['귤', '배', '귤']로 바꾸면 이렇게 나와야 합니다.
{'귤': 2, '배': 1}
아래 칸의 1번 줄에 표가 있습니다. 그 아래를 씁니다.
votes = ['사과', '배', '사과']
처음 펼 때 약 6MB를 받습니다.
파이썬 3.14. Tab을 누르면 다음 단추나 칸으로 갑니다. 들여쓰기는 빈칸 네 개입니다. Enter는 앞줄 들여쓰기를 잇고, 콜론 뒤에서는 한 단계 더 들여 씁니다. Ctrl+Enter로 실행합니다.
견줄 시험 값
'실행'을 누르면 여기에 나옵니다.
여기서 쓴 코드 · 내 예상은 저장하지도 운영자에게 보내지도 않습니다. 페이지를 새로 열면 처음 코드입니다.
힌트
하위 목표 셋의 주석을 먼저 씁니다 — 1번은 셀 딕셔너리 만들기, 2번은 '하나씩 꺼내 칸 올리기', 3번은 '끝나고 쓰기'입니다. 처음 보는 간식이 나오는 둘째 값으로도 따라가 보세요.
정답
모범 답입니다.
votes = ['사과', '배', '사과']
# 1. 빈 딕셔너리
count = {}
# 2. 하나씩 꺼내 칸 올리기
for vote in votes:
now = count.get(vote, 0)
count[vote] = now + 1
# 3. 끝나고 쓰기
print(count){'사과': 2, '배': 1}둘째 값이면 '귤'의 칸이 처음 나올 때 1로 생기고, '배'의 칸이 1로 생긴 뒤, 셋째 표에서 '귤'이 2가 되어 {'귤': 2, '배': 1}입니다.
- 다르게 써도 되는 곳: 이름은 다른 낱말로 지어도 되고,
if vote in count:로 처음 보는 간식인지 갈라 써도 됩니다. - 찍은 화면이 위와 같고 둘째 값에서도
{'귤': 2, '배': 1}이 나오면 맞습니다. - 흔한 오답은 나올 간식을 미리 키로 넣어 두는 것입니다(
count = {'사과': 0, '배': 0}뒤count[vote] += 1). 첫 값에서는 같지만 둘째 값의 '귤'은 키가 없어KeyError로 멈춥니다. 처음 보는 키는get()의 기본값 0에서 시작하게 합니다. 칸에 1을 담기만 하면{'사과': 1, '배': 1}이 찍히고,print(count)를 반복 안에 두면 바퀴마다 찍혀 세 줄이 나옵니다.
다시 볼 레슨: 세기: 메뉴별로 모으기 · 딕셔너리: 키로 찾기