본문으로 건너뛰기

단원 연습 문제

파이썬 목차딕셔너리와 집합문제 12개

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 str

1번 줄의 가격은 따옴표 안에 적은 글자 '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

바퀴마다 한 줄로 줄인 추적 표입니다.

바퀴namestudy[name]total출력
1'수학'5050수학 50
2'국어'3080국어 80
3'영어'20100영어 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이 각각 무엇을 가리키는지 그려 봅니다.

정답
실행 결과
['녹차', '빵', '커피']
None

2번 줄 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}

바퀴마다 한 줄로 줄인 추적 표입니다.

바퀴daybefore7번 줄 뒤 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번 줄 뒤 그 딕셔너리
1today의 0번 칸 = saved의 0번 칸{'qty': 2}
2today의 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·price6번 줄7번 줄 뒤 menu
1'커피'·4000menu를 새 빈 딕셔너리에 붙임{'커피': 4000}
2'라테'·4500menu를 또 새 빈 딕셔너리에 붙임{'라테': 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를 받습니다.

힌트

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를 받습니다.

힌트

하위 목표 셋의 주석을 먼저 씁니다 — 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)를 반복 안에 두면 바퀴마다 찍혀 세 줄이 나옵니다.

다시 볼 레슨: 세기: 메뉴별로 모으기 · 딕셔너리: 키로 찾기

끝까지 내려오면 저절로 표시됩니다. 이 기기에만 저장합니다.

파이썬 목차로