본문으로 건너뛰기

단원 연습 문제

파이썬 목차함수문제 12개

8단원 '함수'의 여덟 레슨에서 9문제를 내고, 앞 단원(1·6·7단원)에서 3문제를 섞었습니다. 앞 단원 문제가 어느 레슨인지는 정답을 펼치면 보입니다. 출력을 쓰는 문제는 빈칸과 줄바꿈까지 종이에 끝까지 쓴 뒤 정답을 펼치세요. 리스트는 파이썬이 찍는 꼴 그대로(쉼표 뒤 빈칸 · 작은따옴표) 씁니다. 줄 수를 알려 주지 않는 문제는 마지막 줄까지 다 씁니다. 함수를 부르는 코드는 칸마다 이름이 어느 값에 붙는지 그리며 따라가면 덜 틀립니다. 막히면 정답 앞의 힌트를 먼저 펼칩니다. 점수는 매기지 않습니다.

한 번에 다 풀 필요는 없습니다. 문제 1~10은 폰으로도 풀 수 있고(약 30~40분), 끝의 만들어 보기 둘은 컴퓨터에서 직접 돌려 봅니다. 이 단원을 건너뛰어도 되는지 보려면 문제 1 · 2 · 4 · 6 · 7 · 8 여섯을 먼저 풀어 보세요(약 20분). 건너뛸지 볼 때는 힌트를 펴지 않고 풉니다. 힌트를 펴고 맞힌 문제나 짐작으로 고른 문제는 틀린 것으로 치고 그 레슨을 봅니다. 모두 맞으면 이 단원 레슨은 건너뛰고, 틀린 문제가 있으면 그 정답 끝의 레슨만 봅니다. 끝의 만들어 보기 둘은 골라서 풉니다.

끝의 두 문제는 프로그램을 직접 만들어 봅니다. 컴퓨터가 있으면 저장해 돌려 맞춰 보고, 폰으로만 본다면 문제에 적힌 값으로 내 코드를 한 줄씩 따라가 나와야 할 화면과 맞춰 봅니다. 실행 결과는 모두 파이썬 3.15로 돌린 것입니다.

문제 1

하고 싶은 일마다 쓸 낱말이나 값을 하나씩 쓰세요. 넷 다 쓴 뒤 정답을 펼치세요.

  • (가) 함수를 만드는 줄의 맨 앞에 쓴다
  • (나) 값 하나를 부른 자리로 보내고, 함수를 그 자리에서 끝낸다
  • (다) 화면에 찍기만 하고 끝나는 함수를 부르면, 부른 자리로 돌아오는 값
  • (라) 이름을 붙이지 않고 그 자리에서 작은 함수를 만든다
힌트

셋은 줄이나 식의 맨 앞에 쓰는 낱말이고, 하나는 첫 글자가 대문자인 값입니다.

정답

받는 답: (가) def · (나) return · (다) None · (라) lambda

  • 같은 답으로 치는 꼴: 없습니다. 넷 다 대소문자까지 이 글자 그대로 씁니다.
  • 틀리는 꼴 print — (나)에: 화면에 쓰는 일과 부른 자리로 값을 보내는 일을 같게 본 것입니다(찍는 것과 돌려주는 것이 같다는 생각). print는 화면에 쓰고 None을 돌려줍니다(규칙 5).
  • 틀리는 꼴 none·0 — (다)에: 소문자 none은 만든 적 없는 이름이라 NameError이고, 0은 수입니다. 돌려줄 값이 없다는 뜻의 값은 첫 글자가 대문자인 None입니다.
  • 틀리는 꼴 def — (라)에: def는 함수를 만들어 이름을 붙입니다. 이름 없이 그 자리에서 만드는 것은 lambda입니다.

다시 볼 레슨: 함수 만들고 부르기 · 돌려받은 값 쓰기 · 이름 없는 함수 lambda

문제 2

음료 주문을 찍는 함수입니다. 크기와 잔 수에는 기본값이 있습니다. 무엇이 찍힐까요? 세 줄을 글자 그대로 쓰세요.

def order(item, size='M', n=1):
    print(item, size, n)


order('라테', 'L')
order(n=2, item='커피')
order('녹차', 2)
힌트

5~7번 줄마다 인자가 위치 인자인지 키워드 인자인지 가르고, 매개변수 셋과 하나씩 짝지어 보세요.

정답
실행 결과
라테 L 1
커피 M 2
녹차 2 1

부를 때마다 새 칸에서 매개변수가 붙는 값입니다.

줄itemsizen출력
5'라테''L'1(기본값)라테 L 1
6'커피''M'(기본값)2커피 M 2
7'녹차'21(기본값)녹차 2 1
  • 5번 줄: item과 size가 앞에서부터 위치 인자 둘에 붙고, 넘기지 않은 n은 기본값 1에 붙습니다.
  • 6번 줄: 키워드 인자는 적은 차례와 상관없이 이름대로 짝지어져 item이 '커피'에, n이 2에 붙습니다. 넘기지 않은 size는 기본값 'M'에 붙습니다.
  • 7번 줄: size가 둘째 자리의 위치 인자 2에 붙습니다.

흔한 오답은 셋째 줄의 녹차 M 2입니다. 2가 잔 수라서 이름이 n인 매개변수를 찾아간다고 본 것입니다(이름이 뜻을 정한다는 생각). 위치 인자는 뜻이 아니라 적은 차례대로 짝지어집니다(규칙 6). 둘째 줄을 2 커피 1로 쓰면 키워드 인자도 적은 차례대로 짝지어진다고 본 것입니다. 키워드 인자는 이름대로 짝지어집니다.

다시 볼 레슨: 매개변수와 인자 · 기본값과 키워드 인자

문제 3

결제 금액의 10%를 포인트로 쌓는 함수입니다. 무엇이 찍힐까요? 한 줄을 글자 그대로 쓰세요.

def point(won):
    return won // 10


total = 8000
saved = point(total)
total = 12000
print(total, saved)
힌트

6번 줄이 실행되는 그때 total이 어느 값에 붙어 있는지 보세요.

정답
실행 결과
12000 800
  • 6번 줄: 그때 total이 8000이라 point에 8000을 넘겨 부릅니다. 새 칸에서 won이 8000에 붙고, 함수가 돌려준 800에 이름 saved를 붙입니다.
  • 7번 줄: total만 12000에 다시 붙습니다. saved는 800에 그대로 붙어 있고, point를 다시 부르지 않습니다.

흔한 오답은 12000 1200입니다. saved가 point(total)이라는 식을 저장해 두었다가 찍을 때 다시 부른다고 본 것입니다(식이 저장된다는 생각). 함수를 부르는 식도 그 줄이 실행될 때 한 번 계산되어 값 하나가 됩니다(규칙 2).

다시 볼 레슨: 변수: 값에 이름 붙이기 · 돌려받은 값 쓰기

문제 4

주문 금액을 모두 더하는 함수입니다. 이 코드를 실행하면 어떻게 될까요? 알맞은 것을 고르세요.

def bill(prices):
    total = 0
    for price in prices:
        total = total + price
    return total


print(bill([4000, 4500]))
print(total)
  • ① 8500을 찍은 뒤 9번 줄도 8500을 찍고 끝난다
  • ② 실행하기 전에 NameError로 멈춰 아무것도 찍지 않는다
  • ③ 8500을 찍은 뒤 9번 줄에서 NameError로 멈춘다
힌트

2번 줄의 total은 어느 칸에 생기는지, 9번 줄은 어느 칸에서 total을 찾는지 보세요.

정답

③ — 실행 결과는 이렇습니다.

실행 결과
8500Traceback (most recent call last):  File "main.py", line 9, in <module>    print(total)          ^^^^^NameError: name 'total' is not defined

8번 줄이 bill을 부르면 새 칸이 생기고, 2번 줄의 total은 그 함수 칸에 생겨 8500까지 커집니다. 5번 줄이 8500을 돌려주면 칸이 사라지고 total도 함께 사라집니다. 8번 줄이 돌려받은 8500을 찍은 뒤, 9번 줄은 전역 칸에서 total을 찾지만 없어 멈춥니다.

  • ① 함수 안에서 붙인 이름도 밖에서 보인다고 봤습니다(함수 안 이름이 밖과 같다는 생각). 함수 몸에서 붙인 이름은 그 함수 칸에만 있다가 칸과 함께 사라집니다(규칙 5). 밖에서 쓰려면 돌려받은 값에 이름을 붙입니다(total = bill([4000, 4500])).
  • ② 실행하기 전에 이름을 모두 살핀다고 봤습니다. NameError는 실행 중 오류라 그 줄에 닿을 때 나고, 앞줄은 이미 실행되었습니다. 실행하기 전에 멈추는 것은 문법 오류입니다.

다시 볼 레슨: 함수 안의 이름, 밖의 이름 · 오류 메시지 읽기

문제 5

문구점 값을 찾는 함수입니다. 함수 밖에서 만든 딕셔너리를 함수 안에서 읽습니다. 무엇이 찍힐까요? 마지막 줄까지 쓰고, 오류가 난다고 보면 찍히는 줄 다음에 오류 이름을 쓰세요.

cost = {'공책': 1500, '연필': 500}


def price(item):
    return cost.get(item, 0)


glue = '풀'
print(price('연필'), price(glue))
print(cost[glue])
힌트

9번 줄과 10번 줄이 없는 키 '풀'을 각각 어떤 꼴로 찾는지 보세요.

정답

500 0을 찍은 뒤 10번 줄에서 KeyError로 멈춥니다.

실행 결과
500 0Traceback (most recent call last):  File "main.py", line 10, in <module>    print(cost[glue])          ~~~~^^^^^^KeyError: '풀'
  • 9번 줄: price 칸에는 cost가 없어 전역 칸에서 찾아 읽습니다(규칙 5). cost.get('연필', 0)은 500을, 없는 키 '풀'은 기본값 0을 돌려줍니다.
  • 10번 줄: 대괄호로 없는 키를 꺼내려다 멈춥니다. 맨 아래 줄은 그런 키 '풀'이 없다는 뜻입니다.

흔한 오답은 둘째 줄에 0을 쓰고 끝내는 것입니다. 대괄호도 get()처럼 없는 키에 0을 돌려준다고 본 것입니다. 기본값을 돌려주는 것은 get()이고, 대괄호는 없는 키에서 멈춥니다. 아무것도 찍지 않고 NameError로 멈춘다고 썼다면 함수 안에서 바깥 이름 cost를 읽을 수 없다고 본 것입니다. 함수 안에서 읽는 이름은 그 칸에 없으면 전역 칸에서 찾습니다(규칙 5).

다시 볼 레슨: 딕셔너리: 키로 찾기 · 함수 안의 이름, 밖의 이름

문제 6

장보기 목록에서 산 물건을 지우고, 물을 더하려는 함수입니다. 무엇이 찍힐까요? 한 줄을 글자 그대로 쓰세요.

def bought(cart, item):
    cart.remove(item)
    cart = cart + ['물']


bag = ['라면', '두부', '파']
bought(bag, '두부')
print(bag)
힌트

7번 줄이 bought를 부를 때 cart가 어느 리스트에 붙는지 그리고, 2번 줄과 3번 줄이 각각 그 그림의 무엇을 바꾸는지 보세요.

정답
실행 결과
['라면', '파']
  • 7번 줄: bought를 부르면 새 칸에서 cart가 bag과 같은 리스트 ①에, item이 '두부'에 붙습니다(규칙 3).
  • 2번 줄: remove()가 ①에서 '두부'를 제자리에서 지워 ①이 ['라면', '파']가 됩니다.
  • 3번 줄: cart + ['물']은 두 리스트를 이은 새 리스트 ②를 만들고, cart만 ②에 다시 붙입니다. ①은 그대로입니다.
  • 함수가 끝나면 칸과 함께 cart가 사라지고, 8번 줄은 bag이 가리키는 ①을 찍습니다.

흔한 오답은 ['라면', '두부', '파']입니다. 함수가 넘겨받은 리스트의 사본을 바꾼다고 본 것입니다(복사된다는 생각). 리스트를 넘기면 매개변수가 같은 리스트를 가리켜, remove() 같은 제자리 바꾸기가 밖에서도 보입니다(규칙 3). ['라면', '파', '물']로 쓰면 매개변수를 새 리스트에 다시 붙이면 밖의 이름도 따라간다고 본 것입니다(따라 옮겨 간다는 생각). 3번 줄은 함수 칸의 이름 cart만 옮깁니다(규칙 3). 물까지 더하려면 cart.append('물')처럼 리스트를 바꾸는 메서드를 씁니다.

다시 볼 레슨: 리스트를 함수에 넘기면 · 리스트를 제자리에서 바꾸기

문제 7

사흘 동안 읽은 쪽수를 재귀로 더합니다. 무엇이 찍힐까요? 한 줄을 쓰세요.

def pages(days):
    if len(days) == 0:
        return 0
    rest = pages(days[1:])
    return days[0] + rest


print(pages([30, 25, 40]))
힌트

칸 · days · 기다리는 식 · 돌려준 값 표를 그려, 돌려준 값을 아래 칸부터 채웁니다.

정답
실행 결과
95

칸을 쌓인 차례대로 적고, 돌려준 값은 아래 칸부터 채운 부른 차례 표입니다.

칸days기다리는 식돌려준 값
pages([30, 25, 40])[30, 25, 40]30 + rest95
pages([25, 40])[25, 40]25 + rest65
pages([40])[40]40 + rest40
pages([])[](끝 조건)0

4번 줄은 days를 1번 칸부터 끝까지 잘라 만든 새 리스트를 넘겨, 부를 때마다 한 칸 줄어든 리스트가 넘어갑니다. 빈 리스트에 닿으면 끝 조건이 0을 돌려주고, 위 칸들이 돌아온 값에 자기 칸 days의 0번 칸 값을 더해 돌려줍니다(규칙 5).

흔한 오답은 0입니다. 끝 조건이 돌려준 값이 곧 답이라고 본 것입니다. 돌려준 값은 처음 부른 줄이 아니라 바로 위 칸의 부른 자리로 갑니다. 30으로 쓰면 돌아온 값을 버리고 맨 위 칸의 0번 칸만 돌려준다고 본 것입니다. 5번 줄은 돌아온 rest를 더해 돌려줍니다.

다시 볼 레슨: 재귀: 자기를 부르는 함수 · 리스트와 이름 둘

문제 8

과일 이름을 글자 수 차례로 정렬합니다. 무엇이 찍힐까요? 마지막 줄까지 쓰고, 오류가 난다고 보면 찍히는 줄 다음에 오류 이름을 쓰세요.

a = ['사과', '배', '바나나']
print(sorted(a, key=len))
b = sorted(a, key=len())
힌트

2번 줄과 3번 줄의 key= 뒤를 견주고, 3번 줄에서 무엇이 먼저 실행되는지 보세요.

정답

['배', '사과', '바나나']를 찍은 뒤 3번 줄에서 TypeError로 멈춥니다.

실행 결과
['배', '사과', '바나나']Traceback (most recent call last):  File "main.py", line 3, in <module>    b = sorted(a, key=len())                      ~~~^^TypeError: len() takes exactly one argument (0 given)
  • 2번 줄: key=len은 len을 부르지 않고 넘깁니다. sorted가 값마다 len을 불러 key 값 2·1·3을 얻고, key 값이 작은 차례로 원래 값을 놓은 새 리스트를 돌려줍니다.
  • 3번 줄: 괄호가 붙은 len()은 sorted에 넘어가기 전에 그 자리에서 인자 없이 불립니다. len은 인자 하나를 받아야 해 멈춥니다. 맨 아래 줄은 'len은 인자 하나를 받아야 하는데 0개를 받았다'는 뜻입니다.

흔한 오답은 첫 줄만 쓰고 끝내는 것입니다. 함수를 넘길 때도 괄호를 붙여야 한다고 본 것입니다(넘길 때도 괄호를 붙인다는 생각). 괄호를 붙이면 그 자리에서 부르고 그 결과를 넘깁니다(규칙 5). 첫 줄을 [1, 2, 3]으로 쓰면 sorted가 key 값을 돌려준다고 본 것입니다. key 값은 차례를 정하는 데만 쓰이고, 돌려주는 것은 원래 값입니다.

다시 볼 레슨: 이름 없는 함수 lambda · 함수 만들고 부르기

문제 9

같은 과일 이름을 이번에는 sorted와 sort로 한 번씩 정렬합니다. 무엇이 찍힐까요? 세 줄을 글자 그대로 쓰세요.

a = ['사과', '배', '바나나']
b = sorted(a, key=len)
c = a.sort()
print(a)
print(b)
print(c)
힌트

3번 줄이 끝난 뒤 a·b·c가 각각 어느 값을 가리키는지 그려 보세요.

정답
실행 결과
['바나나', '배', '사과']
['배', '사과', '바나나']
None
  • 2번 줄: sorted가 글자 수 차례로 놓은 새 리스트 ②를 돌려주고 b가 ②에 붙습니다. a가 가리키는 리스트 ①은 그대로입니다.
  • 3번 줄: .sort()가 ①을 제자리에서 정렬하고 None을 돌려줘, c가 None에 붙습니다. key를 넘기지 않아 글자 수가 아니라 값 자체를 견줘 가나다 차례입니다.

흔한 오답은 셋째 줄에 정렬된 리스트를 쓰는 것입니다. .sort()도 정렬한 리스트를 돌려준다고 본 것입니다. sort는 같은 리스트를 바꾸고 None을 돌려줍니다. 첫 줄을 처음 차례 ['사과', '배', '바나나']로 쓰면 3번 줄도 새 리스트를 만든다고 본 것입니다.

다시 볼 레슨: 정렬: sort와 sorted · 이름 없는 함수 lambda

문제 10

택시 요금은 기본요금 4,800원에 1km마다 1,000원을 더합니다. 3km면 7800이 찍혀야 하는데 아래처럼 멈췄습니다. 몇 번 줄의 무엇을 고쳐야 할까요? 고친 줄을 쓰세요.

def fare(km):
    print(km * 1000)


total = fare(3) + 4800
print(total)
실행 결과
3000Traceback (most recent call last):  File "main.py", line 5, in <module>    total = fare(3) + 4800            ~~~~~~~~^~~~~~TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
힌트

맨 아래 줄의 NoneType 값이 어디서 왔는지, 5번 줄의 fare(3) 자리에 무엇이 놓이는지 보세요.

정답

2번 줄의 print(km * 1000)을 return km * 1000으로 고칩니다.

def fare(km):
    return km * 1000


total = fare(3) + 4800
print(total)
실행 결과
7800

오류는 5번 줄에서 났지만 고칠 곳은 2번 줄입니다. 고치기 전의 fare는 2번 줄에서 3000을 화면에 쓰기만 하고 None을 돌려줘, 5번 줄의 식이 None + 4800이 되었습니다. return으로 바꾸면 fare(3) 자리에 3000이 놓여 3000 + 4800을 계산합니다(규칙 5).

  • 다르게 고쳐도 되는 곳: return 1000 * km도 같습니다. 5번 줄을 total = 3000 + 4800으로 바꿔도 7800이 찍히지만, fare를 부르지 않아 거리를 바꾸면 따라 바뀌지 않습니다.
  • 흔한 오답은 5번 줄의 + 4800을 지우는 것입니다. 오류는 없어지지만 요금 대신 None이 찍힙니다.
def fare(km):
    print(km * 1000)


total = fare(3)
print(total)
실행 결과
3000
None

화면에 3000이 보이니 그 값이 total로 돌아온다고 본 것입니다(찍는 것과 돌려주는 것이 같다는 생각). print는 화면에 쓰고 None을 돌려줍니다(규칙 5). print를 남긴 채 그 아래에 return km * 1000을 더해도 오류는 없어지지만, 3000이 한 줄 더 찍혀 나와야 할 화면과 다릅니다.

다시 볼 레슨: 돌려받은 값 쓰기 · 함수 만들고 부르기

문제 11 (만들어 보기)

주문 금액 계산 함수를 만들어 봅니다. 함수 order는 한 잔 값과 잔 수를 차례로 받아 금액을 돌려줍니다. 다섯 잔 이상이면 한 잔 값에서 500원씩 깎아 줍니다. 뼈대의 마지막 줄 print(order(4500, 2))⁠가 이렇게 찍어야 합니다.

9000

끝에 print(order(4000, 5)) 한 줄을 더해 다른 인자로 한 번 더 부르면 이렇게 나와야 합니다.

9000
17500

아래 뼈대에서 마지막 줄은 그대로 두고, 주석 셋 아래를 채우세요. 다 쓰면 둘째 시험 값으로도 따라가 봅니다.

# 1. 받을 값 정하기
    # 2. 계산하기
    # 3. 돌려주기


print(order(4500, 2))

처음 펼 때 약 6MB를 받습니다.

힌트

금액은 한 잔 값 × 잔 수이고, 깎을지는 잔 수로 정합니다.

정답

모범 답입니다.

# 1. 받을 값 정하기
def order(price, cups):
    # 2. 계산하기
    if cups >= 5:
        price = price - 500
    won = price * cups
    # 3. 돌려주기
    return won


print(order(4500, 2))
실행 결과
9000

print(order(4000, 5))⁠를 더하면 새 칸에서 price가 4000에, cups가 5에 붙습니다. 5 >= 5가 참이라 price가 3500에 다시 붙고, 17500을 돌려줍니다.

  • 다르게 써도 되는 곳: 금액을 먼저 won = price * cups로 계산한 뒤 다섯 잔 이상이면 won = won - 500 * cups⁠로 써도 됩니다. 갈래마다 return을 따로 써도 되고, 잔 수는 정수라 cups > 4도 같습니다. 매개변수 이름은 달라도 되지만 차례는 한 잔 값, 잔 수입니다.
  • 찍은 화면이 위와 같고 둘째 시험 값에서도 9000과 17500이 나오면 맞습니다.
  • 흔한 오답:
    • return 대신 print(won)을 쓰면 9000 다음 None이 한 줄 더 찍힙니다(찍는 것과 돌려주는 것이 같다는 생각). print는 화면에 쓰고 None을 돌려줍니다.
    • 조건을 cups > 5로 쓰면 다섯 잔에서 깎지 않아 둘째 줄이 20000입니다. 두 잔인 처음 시험 값에서는 드러나지 않아 둘째 시험 값으로 봅니다.
    • 9000을 손으로 계산해 return 9000으로 쓰면 둘째 줄도 9000이 찍힙니다. 금액은 받은 값으로 계산합니다.

다시 볼 레슨: 함수 만들고 부르기 · 돌려받은 값 쓰기 · if와 else

문제 12 (만들어 보기)

이번에는 빈 데서 씁니다. 메뉴를 가격 차례로 정렬하는 프로그램을 만들어 봅니다. 메뉴판 won에서 싼 메뉴부터 이름을 담은 리스트를 찍으세요. 이렇게 나와야 합니다.

['녹차', '라테', '스무디']

메뉴판에서 '녹차'의 값만 5000으로 바꾸면 이렇게 나와야 합니다.

['라테', '녹차', '스무디']

아래 칸의 1~5번 줄에 메뉴판이 있습니다. 그 아래를 씁니다.

won = {
    '스무디': 5500,
    '녹차': 3500,
    '라테': 4500,
}

처음 펼 때 약 6MB를 받습니다.

힌트

하위 목표 둘로 나눠 씁니다 — 1. 메뉴 이름 하나를 받아 견줄 값을 돌려주는 함수 정하기 · 2. 그 함수로 정렬해 찍기.

정답

모범 답입니다.

won = {
    '스무디': 5500,
    '녹차': 3500,
    '라테': 4500,
}


def price(name):
    return won[name]


print(sorted(won, key=price))
실행 결과
['녹차', '라테', '스무디']

sorted가 키마다 price를 불러 key 값 5500·3500·4500을 얻고, 작은 차례로 키를 놓습니다. '녹차'를 5000으로 바꾸면 key 값이 5500·5000·4500이 되어 ['라테', '녹차', '스무디']입니다.

  • 다르게 써도 되는 곳: 함수를 따로 만들지 않고 key=lambda name: won[name]⁠을 넘겨도 됩니다. key=won.get도 같은 차례입니다. 정렬한 리스트에 이름을 붙인 뒤 찍어도 됩니다.
  • 찍은 화면이 위와 같고 둘째 시험 값에서도 ['라테', '녹차', '스무디']가 나오면 맞습니다.
  • 흔한 오답:
    • sorted(won)처럼 key를 넘기지 않으면 키 글자를 견줘 가나다 차례가 됩니다. 처음 메뉴판은 가나다 차례와 가격 차례가 같아 맞아 보이지만, 녹차를 5000으로 바꿔도 ['녹차', '라테', '스무디'] 그대로라 드러납니다.
    • key=price()처럼 괄호를 붙이면 그 자리에서 인자 없이 불러 TypeError로 멈춥니다(넘길 때도 괄호를 붙인다는 생각).
    • sorted(won.values())는 이름이 아니라 가격 [3500, 4500, 5500]을 찍습니다.

다시 볼 레슨: 이름 없는 함수 lambda · 정렬: sort와 sorted · 딕셔너리: 키로 찾기

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

파이썬 목차로