# Colab에서 실행해 보세요. 지금 작업 중인 폴더가 어디인지 묻는 명령입니다.
!pwd1 파이썬, 경제학의 새 연필 (1주차)
2 1장 파이썬, 경제학의 새 연필
2.1 이번 장에서 배우는 것
- 파이썬: Google Colab에 접속해 노트북을 만들고, 셀을 실행하는 기본 조작에 익숙해집니다.
- 파이썬:
print(), 주석, 여섯 가지 산술 연산자와 괄호로 계산 과정을 코드로 기록합니다. - 파이썬: 처음 만나는 에러 메시지(
SyntaxError,NameError,ZeroDivisionError)에서 어디를 읽어야 하는지 배웁니다. - 경제학: 총수입, 총비용, 이익을 구분하고 고정비용과 가변비용의 차이를 숫자로 확인합니다.
- 경제학: GDP 성장률을 계산하고, 72의 법칙으로 경제 규모가 두 배 되는 시간을 어림합니다.
2.2 여는 질문: 오늘 이콘 카페는 남는 장사였을까
경제학과 건물 1층에 작은 카페가 하나 있다고 상상해 봅시다. 이름은 이콘 카페. 아메리카노가 한 잔에 3,000원이고, 시험 기간이면 주문 줄이 계단까지 이어지는 흔한 교내 카페입니다. 가상의 가게이지만 이 책이 끝날 때까지 우리와 함께 갑니다. 이번 장에서는 하루 손익을 따지고, 4장에서는 일주일 판매량의 흐름을 읽고, 6장에서는 아메리카노 시장의 수요와 공급을 그리고, 9장에서는 몇 달치 판매 기록을 표 데이터로 분석할 예정입니다. 장이 바뀌어도 가게는 같은 가게입니다.
첫 질문은 소박합니다. 오늘 이콘 카페는 아메리카노를 120잔 팔았습니다. 남는 장사였을까요? “3,000원짜리 120잔이니 36만 원”까지는 암산이 됩니다. 그런데 원두와 우유, 일회용 컵 값으로 잔마다 800원이 나가고, 임대료와 아르바이트 인건비로 하루 25만 원이 꼬박꼬박 나간다면 어떨까요. 암산이 슬슬 버거워집니다. 게다가 내일 판매량이 130잔으로 바뀌면 처음부터 전부 다시 계산해야 합니다.
이 장의 목표는 이 계산을 파이썬에게 시키는 것입니다. 연필로 풀던 문제를 새 연필로 옮겨 적는 일에 가깝습니다. 도구가 바뀌어도 생각은 그대로 경제학입니다. 다만 이 새 연필에는 특별한 점이 하나 있습니다. 계산 과정이 지워지지 않고 글로 남는다는 점, 그래서 숫자 하나를 고치면 나머지 계산이 그대로 따라온다는 점입니다.
2.3 왜 경제학도가 파이썬을 배우는가
경제학 공부하기도 바쁜데 왜 코딩까지 해야 하나. 매 학기 첫 시간마다 나오는 질문이고, 좋은 질문입니다. 여러분의 한 학기는 희소한 자원이니, 수강에도 기회비용을 따져야 마땅합니다. 그래서 막연한 장점 나열 대신, 경제학을 공부하다 보면 실제로 겪게 되는 네 가지 장면으로 답하겠습니다.
첫 번째 장면. 학기말 과제로 공공데이터포털에서 카드 매출 데이터를 내려받았는데 파일이 130만 행입니다. 엑셀은 한 시트에 약 104만 행까지만 담을 수 있어서, 여는 순간 뒷부분이 잘려 나갑니다. 파이썬에는 이런 제한이 없습니다. 수백만 행짜리 데이터도 코드 몇 줄로 읽고, 요약하고, 그림으로 그립니다.
두 번째 장면. 조별 과제에서 그래프 담당을 맡았는데, 지난주에 엑셀의 어떤 메뉴를 어떤 순서로 클릭해서 그 그래프를 만들었는지 기억이 나지 않습니다. 클릭은 기록이 남지 않기 때문입니다. 파이썬 분석은 처음부터 끝까지 코드로, 즉 글로 남습니다. 팀원이 내 코드를 실행하면 내가 만든 결과가 그대로 다시 나옵니다. 연구자들이 이것을 재현성(reproducibility)이라고 부르는데, 요즘 경제학 학술지들은 논문과 함께 분석 코드 제출을 요구할 만큼 이를 중요하게 여깁니다.
세 번째 장면. 매주 월요일 아침에 지난주 환율을 정리해 같은 형식의 보고서로 만드는 일을 맡았다고 합시다. 엑셀로는 매주 같은 클릭을 처음부터 반복해야 하지만, 파이썬으로는 한 번 짜 둔 코드를 매주 실행하기만 하면 됩니다. 반복 작업을 기계에게 넘기는 것, 자동화입니다. 사람은 결과를 해석하는 일에 시간을 쓰면 됩니다.
네 번째 장면은 졸업 후입니다. 계량경제학 수업에서 만나게 될 Stata 같은 통계 패키지는 잘 만든 도구지만 유료여서, 학교 실습실을 벗어나는 순간 쓰기 어렵습니다. 파이썬은 무료이고, 전 세계 사람들이 만들어 공유하는 라이브러리 — 미리 만들어진 코드 모음 — 가 통계 분석부터 인공지능까지 대부분의 영역을 덮고 있습니다. 학교에서 익힌 도구를 첫 출근 날부터 그대로 쓸 수 있다는 뜻입니다.
물론 엑셀이 나쁜 도구라는 말은 아닙니다. 동아리 회비 정산 정도라면 엑셀이 더 빠릅니다. 요점은 데이터가 커지고 분석이 반복될수록 코드의 이점이 커진다는 것이고, 현대 경제학은 정확히 그 방향으로 움직여 왔다는 것입니다.
2.4 우리의 작업실: Google Colab
파이썬 코드를 쓰고 실행할 장소가 필요합니다. 이 책에서는 아무것도 설치할 필요가 없는 Google Colab(콜랩)을 씁니다. 웹 브라우저와 구글 계정만 있으면 됩니다.
- 브라우저에서 colab.research.google.com에 접속해 구글 계정으로 로그인합니다.
파일 > 새 노트메뉴로 빈 노트북을 만듭니다.- 왼쪽 위의
Untitled0.ipynb를 클릭해 이름을week1.ipynb처럼 바꿉니다. 파일은 구글 드라이브에 자동 저장됩니다.
화면에 나타난 문서가 노트북(notebook)입니다. 노트북은 셀(cell)이라는 칸을 쌓아 만드는데, 셀에는 두 종류가 있습니다. 코드 셀에는 파이썬 코드를 쓰고, 텍스트 셀에는 지금 여러분이 읽고 있는 것 같은 설명 글을 씁니다. 코드와 글이 한 문서에 섞여 있다는 것이 노트북의 매력입니다. 계산과 그 계산에 대한 해석을 나란히 둘 수 있으니, 경제 분석 보고서를 쓰기에 꼭 맞는 형식입니다.
코드 셀을 실행하는 방법은 두 가지입니다. 셀 왼쪽의 실행 단추를 누르거나, 셀을 클릭한 뒤 Shift + Enter를 누르는 것입니다. 앞으로 수백 번 실행하게 될 테니 단축키 쪽에 익숙해지기를 권합니다. 셀을 추가할 때는 화면 위쪽의 + 코드, + 텍스트 단추를 쓰고, 지울 때는 셀 오른쪽의 휴지통 아이콘을 누릅니다.
[직접 해보기] 노트북 다뤄 보기
새로 만든 노트북에서 아래 세 가지를 해 보세요. 코드는 아직 몰라도 됩니다. 손가락이 화면 구조를 기억하게 만드는 것이 목적입니다.
+ 코드를 눌러 코드 셀을 하나 추가하고,1 + 1을 입력한 뒤Shift + Enter로 실행해 보세요. 셀 아래에 2가 나타나면 성공입니다.+ 텍스트를 눌러 텍스트 셀을 추가하고, “1주차 연습장”이라고 적은 뒤 실행해 보세요.- 방금 만든 두 셀을 휴지통 아이콘으로 지워 보세요.
노트북 밖에 컴퓨터가 있다
한 가지 미리 알아 두면 좋은 사실이 있습니다. Colab 노트북은 여러분의 컴퓨터가 아니라 구글이 잠시 빌려준 컴퓨터 위에서 돌아갑니다. 그 컴퓨터에도 폴더가 있고 파일이 있습니다. 셀에서 명령 맨 앞에 느낌표 !를 붙이면, 파이썬이 아니라 그 컴퓨터의 운영체제에게 직접 말을 걸 수 있습니다. 두 가지만 시험해 봅시다. 아래 셀은 Colab에서 직접 실행해 보세요.
Colab에서 실행하면 이렇게 나옵니다.
/content
pwd는 print working directory, “지금 있는 폴더를 알려 달라”는 뜻의 명령입니다. /content가 빌려준 컴퓨터 안에서 내 노트북이 일하고 있는 폴더의 주소입니다. 그 폴더 안에 무엇이 들어 있는지도 물어봅시다.
# 지금 폴더에 어떤 파일과 폴더가 있는지 나열하는 명령입니다.
!lssample_data
ls는 list, “목록을 보여 달라”는 명령이고, 구글이 연습용으로 넣어 둔 sample_data 폴더 하나가 보입니다. 지금은 이 두 명령이 시시해 보여도 괜찮습니다. 7장에서 노트북을 벗어나 내 컴퓨터의 터미널에서 파이썬 파일을 직접 실행할 때 이 명령들을 다시 만나게 됩니다. 그때를 위한 복선으로 기억해 두세요. 운영체제별 명령어 대응표는 부록 A에 정리되어 있습니다.
2.5 첫 문장 쓰기: print()
준비가 끝났으니 첫 코드를 씁니다. 파이썬에게 무언가를 화면에 보여 달라고 부탁하는 명령이 print()입니다. 괄호 안에 보여 줄 내용을 넣되, 글자를 보여 주고 싶다면 따옴표로 감쌉니다.
print("이콘 카페, 오늘도 영업 시작")이콘 카페, 오늘도 영업 시작
한 줄씩 뜯어보기
print("이콘 카페, 오늘도 영업 시작")print— 파이썬에 미리 준비되어 있는 명령(함수)의 이름입니다. 철자가 한 글자라도 다르면 파이썬은 알아듣지 못합니다.(와)— 괄호는 “이 안의 내용을 print에게 전달한다”는 표시입니다. 여는 괄호와 닫는 괄호는 반드시 짝을 이룹니다."이콘 카페, 오늘도 영업 시작"— 따옴표로 감싼 부분은 문자열(string), 즉 글자 그대로의 데이터입니다. 따옴표 안의 내용은 계산되거나 해석되지 않고 있는 그대로 출력됩니다.
세 부분이 합쳐져 “이 문자열을 화면에 출력하라”는 한 문장이 됩니다. 따옴표는 작은따옴표로 바꿔도 똑같이 동작합니다.
print('작은따옴표도 됩니다')작은따옴표도 됩니다
큰따옴표 "든 작은따옴표 '든 자유지만, 열 때와 닫을 때 같은 종류여야 합니다. 이 책에서는 큰따옴표로 통일하겠습니다.
글자가 아니라 숫자를 출력할 때는 따옴표가 필요 없습니다. 아니, 계산에 쓸 숫자라면 없어야 합니다.
print(3000)3000
따옴표를 붙인 "3000"과 붙이지 않은 3000은 파이썬에게 전혀 다른 데이터입니다. 하나는 글자 네 개짜리 문자열이고, 하나는 계산할 수 있는 수입니다. 이 구분이 왜 중요한지는 2장 자료형에서 제대로 다루기로 하고, 지금은 “계산할 숫자에는 따옴표를 붙이지 않는다”만 기억하면 됩니다. 계산할 숫자라고 했으니, 정말 계산을 시켜 봅시다.
print(3000 * 120)360000
괄호 안에 계산식을 넣으면 파이썬이 계산을 먼저 끝내고 그 결과만 출력합니다. *는 곱하기 기호입니다. 3,000원짜리 아메리카노 120잔, 36만 원이 나왔습니다.
그런데 화면에 360000만 덩그러니 찍혀 있으면, 다음 주에 이 노트북을 다시 연 나는 이 숫자가 무엇이었는지 알 길이 없습니다. 쉼표를 쓰면 설명과 숫자를 한 줄에 같이 내보낼 수 있습니다.
print("아메리카노 매출:", 3000 * 120, "원")아메리카노 매출: 360000 원
print()는 쉼표로 구분된 값들을 순서대로, 사이에 공백을 하나씩 넣어 출력합니다. 규칙은 아까와 같습니다. 따옴표 안의 글자는 그대로, 따옴표 밖의 식은 계산 결과로. 이 한 줄짜리 습관 — 숫자에 라벨을 붙여 출력하는 것 — 이 앞으로 여러분의 계산 노트를 읽을 만한 문서로 만들어 줍니다.
실수 노트: 따옴표와 괄호는 반드시 짝으로
첫 주에 가장 자주 만나는 에러는 화려한 것이 아닙니다. 따옴표를 열고 닫지 않거나, 괄호를 열고 닫지 않는 실수입니다. 아래 두 셀은 일부러 틀리게 쓴 코드입니다. 눈으로만 보지 말고 Colab에서 직접 입력해 에러를 구경해 보세요. 에러 화면을 처음 만나는 장소가 시험 전날보다는 지금인 편이 낫습니다.
print("이콘 카페, 오늘도 영업 시작)닫는 따옴표를 빠뜨린 이 셀을 실행하면 이런 화면이 나옵니다.
Cell In[1], line 1
print("이콘 카페, 오늘도 영업 시작)
^
SyntaxError: unterminated string literal (detected at line 1)
에러 메시지는 아래에서 위로 읽는 것이 요령입니다. 마지막 줄의 SyntaxError는 “문법 오류”, 뒤따르는 unterminated string literal은 “끝나지 않은 문자열”이라는 뜻입니다. 그 위의 화살표 ^는 파이썬이 문제를 발견한 위치를 가리킵니다. 괄호를 빠뜨렸을 때의 메시지도 확인해 봅시다.
print(3000 * 120 # 닫는 괄호를 빠뜨렸다 Cell In[2], line 1
print(3000 * 120 # 닫는 괄호를 빠뜨렸다
^
SyntaxError: '(' was never closed
이번에는 메시지가 더 직설적입니다. “여는 괄호가 끝내 닫히지 않았다.” 에러 메시지는 여러분을 혼내는 소리가 아니라 고칠 위치를 알려 주는 안내문입니다. 빨간 화면이 떠도 심호흡 한 번 하고 마지막 줄부터 읽으세요. 예방하는 습관도 있습니다. 따옴표든 괄호든 열자마자 닫고, 그다음에 안을 채우는 것입니다. 에러 메시지를 읽는 방법은 부록 B에서 자세히 다룹니다.
[직접 해보기] 첫 출력 연습
아래 셀에 세 줄의 코드를 완성해 보세요.
- 자신의 이름을 출력합니다.
- 올해 연도를 따옴표 없는 숫자로 출력합니다.
"아메리카노 두 잔:"이라는 글자와3000 * 2의 계산 결과를 쉼표로 이어 한 줄에 출력합니다.
# TODO 1: 자신의 이름을 출력해 보세요.
# TODO 2: 올해 연도(숫자)를 따옴표 없이 출력해 보세요.
# TODO 3: "아메리카노 두 잔:" 이라는 글자와 3000 * 2 의 결과를 쉼표로 이어 출력해 보세요.2.6 미래의 나에게 남기는 메모: 주석
방금 위의 실습 셀에서 이미 눈치챘을지도 모르겠습니다. # TODO 1:로 시작하는 줄들이 있었는데, 셀을 그냥 실행해도 아무 일이 일어나지 않았습니다. # 뒤에 오는 내용을 파이썬이 통째로 무시하기 때문입니다. 이렇게 #으로 시작하는 메모를 주석(comment)이라고 합니다.
주석은 기계가 아니라 사람을 위한 글입니다. 일주일 뒤의 나, 조별 과제의 팀원, 과제를 채점하는 조교가 독자입니다. 코드는 “무엇을 하는지”를 이미 보여 주므로, 좋은 주석은 “왜 그렇게 했는지”를 적습니다. 쓰는 방식은 두 가지입니다. 코드 윗줄에 쓰거나, 코드 뒤에 이어 쓰거나.
# 아메리카노 하루 매출을 계산한다
print(3000 * 120)
print(800 * 120) # 잔당 재료비 800원 곱하기 120잔360000
96000
첫 줄처럼 윗줄 주석은 코드 묶음의 목적을 설명할 때, 셋째 줄처럼 옆 주석은 그 줄 하나에 대한 짧은 메모에 어울립니다. 주석에는 한 가지 용도가 더 있습니다. 멀쩡한 코드 줄 맨 앞에 #을 붙여 잠시 꺼 두는 것입니다.
print("첫 줄은 실행됩니다")
# print("가운데 줄은 주석이 되어 실행되지 않습니다")
print("셋째 줄도 실행됩니다")첫 줄은 실행됩니다
셋째 줄도 실행됩니다
이것을 주석 처리(comment out)라고 부릅니다. “이 줄이 문제인가?” 싶을 때 지우는 대신 잠시 꺼 보는 것인데, 원인을 찾아 코드를 고치는 작업 — 디버깅 — 에서 가장 자주 쓰는 기술 중 하나입니다. Colab에서는 줄을 선택하고 Ctrl + /(맥은 Cmd + /)를 누르면 주석 처리를 켜고 끌 수 있습니다.
실수 노트: 철자 오타와 한글 따옴표
두 번째로 자주 나오는 에러는 철자 오타입니다. print를 급하게 치다 보면 pirnt가 되곤 합니다. 아래 셀을 실행하면 어떻게 될까요.
pirnt("이콘 카페")NameError Traceback (most recent call last)
Cell In[3], line 1
----> 1 pirnt("이콘 카페")
NameError: name 'pirnt' is not defined. Did you mean: 'print'?
NameError는 “그런 이름은 모른다”는 뜻입니다. 파이썬은 pirnt라는 명령을 가지고 있지 않으니까요. 다행히 요즘 파이썬은 마지막 줄에서 Did you mean: 'print'?라고 후보까지 짚어 줍니다. 역시 마지막 줄부터 읽으면 됩니다.
같은 계열의 함정이 하나 더 있습니다. 카카오톡이나 한글 문서에 코드를 적어 두면 프로그램이 따옴표를 멋대로 둥근 따옴표 “ ”로 바꿔 놓는 경우가 있는데, 이것을 그대로 붙여 넣으면 SyntaxError: invalid character '“' (U+201C) 라는 에러가 납니다. 파이썬이 아는 따옴표는 곧은 따옴표 " 뿐입니다. 코드는 코드 셀이나 메모장처럼 서식 없는 곳에 보관하는 습관을 들이세요.
2.7 파이썬은 계산기다: 산술 연산
이제 이 장의 주력 도구인 산술 연산을 정리합니다. 파이썬이 쓰는 기호는 수학 시간의 기호와 조금 다릅니다. 곱하기가 ×가 아니라 *, 나누기가 ÷가 아니라 /인 것은 키보드로 바로 칠 수 있는 기호를 골랐기 때문입니다.
| 연산자 | 뜻 | 예 | 결과 |
|---|---|---|---|
+ |
덧셈 | 3000 + 3800 |
6800 |
- |
뺄셈 | 3000 - 800 |
2200 |
* |
곱셈 | 3000 * 120 |
360000 |
/ |
나눗셈 | 10 / 4 |
2.5 |
** |
거듭제곱 | 2 ** 10 |
1024 |
// |
나눗셈의 몫 | 10 // 4 |
2 |
% |
나눗셈의 나머지 | 10 % 4 |
2 |
위의 네 가지, 사칙연산부터 이콘 카페 장부에 적용해 봅시다.
print("아메리카노와 라떼 한 잔씩:", 3000 + 3800, "원")
print("아메리카노 잔당 마진:", 3000 - 800, "원")
print("오늘 아메리카노 매출:", 3000 * 120, "원")
print("7000원 케이크를 둘이 나누면:", 7000 / 2, "원")아메리카노와 라떼 한 잔씩: 6800 원
아메리카노 잔당 마진: 2200 원
오늘 아메리카노 매출: 360000 원
7000원 케이크를 둘이 나누면: 3500.0 원
마지막 줄을 자세히 보세요. 3500이 아니라 3500.0이 나왔습니다. 나눗셈 /는 나누어떨어지는 경우에도 결과를 항상 소수점이 붙은 수, 실수(float)로 돌려줍니다. 정수와 실수가 왜 구분되는지는 2장에서 다루고, 여기서는 소수 계산에서 미리 봐 두면 좋은 장면을 하나만 소개합니다.
print(0.1 + 0.2)0.30000000000000004
0.3이 아니라 0.30000000000000004. 고장이 아닙니다. 컴퓨터는 소수를 이진법으로 저장하는데, 0.1 같은 수는 이진법으로 딱 떨어지지 않아서 아주 작은 오차가 남습니다. 우리 계산에서 이 오차가 결론을 바꾸는 일은 없지만, 소수 계산 끝에 긴 꼬리가 붙어 나와도 놀라지 않으면 됩니다. 보기 좋게 반올림하는 방법은 2장에서 배웁니다.
거듭제곱: 경제학이 사랑하는 연산
**는 같은 수를 거듭 곱하는 연산입니다. 2 ** 10은 2를 열 번 곱한 값이지요. 성장하는 경제, 불어나는 예금, 오르는 물가처럼 “매년 몇 %씩”이 쌓이는 현상은 전부 거듭제곱으로 계산합니다. 이 장의 두 번째 경제학 응용에서 주인공이 될 연산이니 손에 익혀 두세요.
print("2의 10제곱:", 2 ** 10)
print("10의 3제곱:", 10 ** 3)2의 10제곱: 1024
10의 3제곱: 1000
실수 노트: ^는 거듭제곱이 아닙니다
수학 표기에 익숙한 손은 거듭제곱을 2^10이라고 치기 쉽습니다. 문제는 이렇게 써도 에러가 나지 않는다는 것입니다.
print(2 ^ 10) # 거듭제곱이 아니다8
1024가 아니라 8이 나왔습니다. ^는 파이썬에서 비트 연산이라는 전혀 다른 일을 하는 기호입니다(무엇인지는 이 책에서 다루지 않습니다). 에러가 나는 실수는 그 자리에서 잡히지만, 에러 없이 틀린 값을 내놓는 실수는 보고서까지 흘러갑니다. 거듭제곱은 반드시 **입니다.
하나 더. 수학에서 못 하는 일은 파이썬도 못 합니다. 0으로 나누어 봅시다.
print(10 / 0)ZeroDivisionError Traceback (most recent call last)
Cell In[4], line 1
----> 1 print(10 / 0)
ZeroDivisionError: division by zero
ZeroDivisionError, “0으로 나눴다”는 뜻 그대로입니다. 지금은 일부러 만든 에러지만, 나중에 데이터 분석을 하다 보면 분모가 0인 행이 어딘가 숨어 있다가 이 에러로 불쑥 나타나곤 합니다. 이름을 기억해 두면 그때 당황하지 않습니다.
몫과 나머지: 편의점의 수학
//와 %는 나눗셈을 두 조각으로 나눠 줍니다. 장면 하나로 익혀 봅시다. 지갑에 5,000원이 있고 삼각김밥이 하나에 1,200원입니다. 몇 개 살 수 있고, 얼마가 남을까요. 감으로 말고 계산으로 답합니다.
print("살 수 있는 개수:", 5000 // 1200, "개")
print("남는 돈:", 5000 % 1200, "원")살 수 있는 개수: 4 개
남는 돈: 200 원
//는 나눗셈에서 몫만 남기고 소수점 아래를 버립니다. 5000 나누기 1200은 4.1666…이지만 삼각김밥을 0.1666개 살 수는 없으니 4개. %는 그렇게 4개를 사고 남는 나머지 200원을 돌려줍니다. 예산으로 물건을 몇 개 살 수 있는지, 자금이 얼마나 남는지 따지는 계산은 앞으로도 계속 이 짝으로 처리합니다.
연산 순서: 괄호는 생각을 지키는 장치
계산 순서는 수학과 같습니다. 괄호 안이 가장 먼저, 그다음 거듭제곱, 그다음 곱셈과 나눗셈, 마지막이 덧셈과 뺄셈입니다. 순서를 무시하면 어떤 일이 생기는지 학생식당에서 확인해 봅시다. 학식 백반이 5,500원, 음료가 1,200원인 세트를 일주일에 3번 사 먹는다면 얼마가 들까요.
print("잘못된 계산:", 5500 + 1200 * 3, "원")
print("올바른 계산:", (5500 + 1200) * 3, "원")잘못된 계산: 9100 원
올바른 계산: 20100 원
첫 줄에서 파이썬은 곱셈을 먼저 해서 “백반 한 번, 음료 세 번”이라는 이상한 식단을 계산했습니다. 9,100원. 실제로는 세트 전체가 3번이니 괄호로 묶은 둘째 줄, 20,100원이 맞습니다. 눈여겨볼 점은 첫 줄에서 에러가 나지 않았다는 것입니다. 문법이 맞으면 파이썬은 시키는 대로 계산할 뿐, 그 계산이 내 의도와 같은지는 확인해 주지 않습니다. 괄호는 문법 장치가 아니라 생각을 지키는 장치입니다. 순서가 조금이라도 헷갈리면 괄호를 아끼지 마세요.
[직접 해보기] 산술 연산 연습
아래 셀에서 세 문제를 계산해 보세요. 각 줄에 라벨을 붙여 출력하면 더 좋습니다.
- 2026년 최저시급은 10,320원입니다. 5시간 아르바이트의 일당을 계산해 보세요.
- 20,000원으로 4,500원짜리 학식을 몇 번 먹을 수 있고 얼마가 남는지,
//와%로 각각 출력해 보세요. - 아메리카노 3,000원과 라떼 3,800원을 두 잔씩 주문한 금액을 괄호를 써서 한 줄로 계산해 보세요.
# TODO 1: 시급 10320원, 5시간 일당
# TODO 2: 20000원으로 4500원 학식 몇 번? 잔돈은? (// 와 % 사용)
# TODO 3: (아메리카노 + 라떼) 두 잔씩 — 괄호 사용2.8 경제학 응용 1: 이콘 카페의 하루 손익
여는 질문으로 돌아갈 시간입니다. 오늘 이콘 카페의 숫자를 다시 정리하면 이렇습니다.
| 항목 | 값 |
|---|---|
| 아메리카노 가격 | 3,000원/잔 |
| 오늘 판매량 | 120잔 |
| 잔당 재료비 (원두·우유·컵) | 800원 |
| 하루 고정비용 (임대료·인건비 등) | 250,000원 |
계산에 들어가기 전에 경제학원론의 첫 페이지 개념 두 가지를 짚습니다. 비용에는 두 종류가 있습니다. 고정비용(fixed cost)은 오늘 한 잔도 못 팔아도 나가는 돈입니다. 임대료와 아르바이트 인건비가 그렇습니다. 가변비용(variable cost)은 판매량에 비례해 늘어나는 돈입니다. 한 잔 팔 때마다 원두와 우유, 컵 값 800원이 나갑니다. 그리고 총수입(total revenue)은 가격 곱하기 판매량, 이익은 총수입에서 총비용을 뺀 값입니다.
\[\text{이익} = \underbrace{P \times Q}_{\text{총수입}} - \underbrace{(\text{고정비용} + \text{가변비용})}_{\text{총비용}}\]
이 식을 파이썬으로 한 단계씩 옮깁니다. 먼저 들어온 돈부터.
# 총수입 = 가격 x 판매량
print("총수입:", 3000 * 120, "원")총수입: 360000 원
36만 원이 들어왔습니다. 다음은 나간 돈입니다. 가변비용을 먼저 구하고, 고정비용을 얹어 총비용을 만듭니다.
# 총가변비용 = 잔당 재료비 x 판매량
print("총가변비용:", 800 * 120, "원")
# 총비용 = 고정비용 + 총가변비용
print("총비용:", 250000 + 800 * 120, "원")총가변비용: 96000 원
총비용: 346000 원
재료비로 96,000원, 고정비용까지 합치면 346,000원이 나갔습니다. 둘째 줄에서 곱셈이 덧셈보다 먼저 계산되므로 괄호 없이도 의도대로 움직였습니다. 이제 마지막 단계, 이익입니다. 총수입 계산과 총비용 계산을 한 줄에 합치는데, 여기서는 괄호가 결정적인 역할을 합니다.
# 이익 = 총수입 - 총비용
print("오늘의 이익:", 3000 * 120 - (250000 + 800 * 120), "원")오늘의 이익: 14000 원
한 줄씩 뜯어보기
print("오늘의 이익:", 3000 * 120 - (250000 + 800 * 120), "원")3000 * 120— 총수입 360,000원. 곱셈이 뺄셈보다 우선이라 괄호가 없어도 안전합니다.- (250000 + 800 * 120)— 총비용 346,000원을 통째로 뺍니다. 이 괄호를 빠뜨리면 파이썬은360000 - 250000 + 96000, 즉 206,000원이라는 그럴듯하지만 틀린 이익을 내놓습니다. 뺄셈 뒤에 오는 묶음은 반드시 괄호로 감쌉니다.print("오늘의 이익:", ..., "원")— 라벨, 계산 결과, 단위를 쉼표로 이어 한 줄로 출력합니다.
답이 나왔습니다. 오늘 이콘 카페는 14,000원 남는 장사였습니다. 그런데 이 숫자를 어떻게 읽어야 할까요. 하루 12시간 영업이라면 시간당 1,200원이 채 안 되는 이익입니다. 게다가 이 계산에는 사장님 본인의 인건비가 들어 있지 않습니다. 사장님이 카페 문을 닫고 다른 곳에서 일했다면 벌었을 소득, 즉 기회비용까지 비용으로 치면 오늘은 남는 장사가 아니었을지도 모릅니다. 이 계산은 2장에서 변수를 배운 뒤 직접 해 봅니다.
코드 쪽에도 아쉬움이 하나 남았습니다. 판매량 120이 세 군데나 반복해서 등장한다는 점입니다. 내일 판매량이 바뀌면 세 군데를 전부 찾아 고쳐야 하고, 하나라도 놓치면 에러 없이 틀린 답이 나옵니다. 이 불편함의 해결책이 바로 다음 장의 주제인 변수입니다.
[직접 해보기] 단체 주문이 들어온 날
다음 날, 학회 단체 주문 덕분에 아메리카노가 150잔 팔렸습니다. 가격과 비용 구조는 그대로라고 할 때, 위의 세 셀을 참고해 총수입, 총비용, 이익을 계산해 보세요. 판매량이 30잔 늘면 이익은 몇 배가 되는지도 눈으로 확인해 보세요.
# TODO 1: 판매량 150잔일 때 총수입
# TODO 2: 판매량 150잔일 때 총비용 (고정비용 250000원 + 잔당 800원)
# TODO 3: 판매량 150잔일 때 이익2.9 경제학 응용 2: GDP 성장률과 72의 법칙
카페 계산대에서 나라 경제로 화면을 넓혀 봅시다. GDP(국내총생산)는 한 나라가 1년 동안 새로 만들어 낸 재화와 서비스 가치의 합계, 말하자면 나라 전체의 매출표입니다. 어느 나라의 GDP가 작년 2,400조 원에서 올해 2,472조 원이 되었다고 합시다(교육용 가상 수치입니다). 이 경제는 얼마나 빠르게 자라고 있을까요.
성장률은 “늘어난 만큼을 원래 크기로 나눈 비율”입니다. 올해 GDP를 \(Y_1\), 작년 GDP를 \(Y_0\)이라고 쓰면
\[g = \frac{Y_1 - Y_0}{Y_0} \times 100 \,(\%)\]
이 식은 앞으로 물가상승률, 주가수익률 등 이름만 바뀐 채 계속 다시 나타나니, 이번에 손으로 한번 옮겨 두면 두고두고 씁니다.
print("GDP 성장률(%):", (2472 - 2400) / 2400 * 100)GDP 성장률(%): 3.0
한 줄씩 뜯어보기
print("GDP 성장률(%):", (2472 - 2400) / 2400 * 100)(2472 - 2400)— 1년 동안 늘어난 GDP, 72조 원입니다. 뺄셈이 나눗셈보다 먼저 일어나도록 괄호로 묶었습니다. 괄호가 없으면2400 / 2400이 먼저 계산되어 엉뚱한 값이 나옵니다./ 2400— 늘어난 양을 작년 크기로 나눠 비율로 만듭니다. 0.03, 즉 작년의 3%만큼 자랐습니다.* 100— 비율을 백분율로 바꿉니다. 나눗셈과 곱셈은 우선순위가 같아 왼쪽부터 차례로 계산됩니다.
3% 성장. 그런데 이 숫자, 큰 걸까요 작은 걸까요. 0.03이라는 소수만 봐서는 감이 오지 않습니다. 경제학자들이 애용하는 번역법이 하나 있습니다. “이 속도로 가면 경제 규모가 두 배 되는 데 몇 년 걸리는가”로 바꿔 읽는 것입니다.
72의 법칙
72의 법칙(rule of 72)은 오래된 어림셈입니다. 매년 \(g\%\)씩 성장하는 경제가 두 배가 되는 데 걸리는 시간은 대략 \(72 / g\) 년이라는 것입니다. 성장률 3%라면?
print("경제 규모가 두 배 되기까지 약", 72 / 3, "년")경제 규모가 두 배 되기까지 약 24.0 년
24년. 지금 태어난 아이가 대학을 졸업할 무렵 경제가 두 배가 되어 있다는 뜻입니다. 그런데 이 어림셈, 믿어도 될까요. 근거를 대라고 요구합시다. 매년 3% 성장한다는 것은 매년 1.03배가 된다는 것이고, 24년이면 1.03을 24번 곱한 것이니 — 방금 배운 거듭제곱이 나설 차례입니다. 이 값이 2에 가깝다면 어림셈은 합격입니다.
print("1.03의 24제곱:", 1.03 ** 24)1.03의 24제곱: 2.032794106460404
2.0328. 두 배에 놀랄 만큼 가깝습니다. 왜 하필 72인지 증명하려면 로그가 필요해 이 책의 범위를 살짝 벗어나지만, 72가 2, 3, 4, 6, 8, 9, 12로 전부 나누어떨어지는 암산 친화적인 수라서 선택되었다는 점은 알아 둘 만합니다.
이 법칙의 진짜 쓸모는 성장률의 작은 차이를 시간의 큰 차이로 번역해 준다는 데 있습니다. 성장률이 3%에서 1.5%로, 겨우 1.5%포인트 낮아지면 어떻게 될까요.
print("성장률 3.0%일 때 두 배까지:", 72 / 3, "년")
print("성장률 1.5%일 때 두 배까지:", 72 / 1.5, "년")
print("검산 - 1.015의 48제곱:", 1.015 ** 48)성장률 3.0%일 때 두 배까지: 24.0 년
성장률 1.5%일 때 두 배까지: 48.0 년
검산 - 1.015의 48제곱: 2.04347828931298
24년이 48년이 됩니다. 한 세대 안에 이룰 일이 두 세대짜리 일이 되는 것입니다. 뉴스에서 성장률 전망치가 몇 %포인트 내려갔다고 1면 기사가 되는 이유가 이 계산 안에 들어 있습니다.
한 가지 짚고 넘어갈 것이 있습니다. 우리는 “24년이면 약 두 배”를 확인했을 뿐, “정확히 몇 년째에 처음으로 두 배를 넘는가”는 아직 계산하지 못합니다. 그 질문에 답하려면 1년씩 곱해 가며 세는 반복문이 필요한데, 4장에서 이 계산으로 다시 돌아와 오늘의 어림을 검증할 것입니다.
[직접 해보기] 다른 성장률로 확인하기
고도성장기의 한국처럼 연 6%로 성장하는 경제와, 저성장에 들어선 연 2% 경제를 비교해 보세요.
- 성장률 6%일 때 두 배까지 걸리는 햇수를 72의 법칙으로 어림해 보세요.
- 1.06을 그 햇수만큼 거듭제곱해 정말 2에 가까운지 검산해 보세요.
- 성장률 2%에 대해서도 같은 작업을 반복해 보세요.
# TODO 1: 72의 법칙 - 성장률 6%
# TODO 2: 검산 - 1.06 ** (위에서 구한 햇수)
# TODO 3: 성장률 2%로 같은 작업2.10 연습문제
손풀기는 본문 예제를 살짝 비튼 문제, 응용은 같은 도구를 새 상황에 옮겨 쓰는 문제, 도전은 다음 장들을 반걸음 먼저 밟아 보는 문제입니다. 모든 문제는 이번 장에서 배운 것 — print(), 주석, 산술 연산, 괄호 — 만으로 풀 수 있습니다.
손풀기
1. 이콘 카페 메뉴판. print()를 세 번 써서 아래 메뉴판을 출력하세요. 각 줄은 메뉴 이름(문자열), 가격(숫자), "원"(문자열)을 쉼표로 이어 만듭니다.
아메리카노 3000 원
카페라떼 3800 원
크루아상 4200 원
2. 아르바이트 일당. 2026년 최저시급은 10,320원입니다. 하루 6시간씩 일했을 때의 일당을 계산해 일당: 61920 원 형식으로 출력하세요. 코드 윗줄에 무슨 계산인지 주석을 다세요.
3. 김밥과 잔돈. 지갑에 만 원이 있고 김밥이 한 줄에 1,500원입니다. 몇 줄 살 수 있는지, 사고 나면 얼마가 남는지 //와 %로 각각 계산해 두 줄로 출력하세요.
# TODO 문제 1: 이콘 카페 메뉴판
# TODO 문제 2: 아르바이트 일당 (주석 포함)
# TODO 문제 3: 김밥과 잔돈 (// 와 %)응용
4. 할인 계산. 45,000원짜리 운동화를 20% 할인 판매합니다. 할인 금액과 최종 가격을 각각 라벨을 붙여 출력하세요. 할인 금액은 원래 가격에 0.2를 곱해 구하고, 최종 가격은 원래 가격에서 할인 금액을 빼서 구합니다.
5. 환율 환산. 환율이 1달러에 1,350원이라고 합시다. 25달러짜리 게임은 원화로 얼마인지, 용돈 50,000원은 몇 달러인지 각각 계산해 출력하세요. 곱할 때와 나눌 때를 구분하는 것이 핵심입니다.
6. 어느 나라의 성장률. 어느 나라의 GDP가 작년 1,800조 원에서 올해 1,845조 원이 되었습니다. 본문의 성장률 공식으로 성장률(%)을 계산해 출력하고, 72의 법칙으로 이 경제가 두 배 되는 데 걸리는 햇수를 어림해 출력하세요.
# TODO 문제 4: 할인 금액과 최종 가격
# TODO 문제 5: 달러 -> 원, 원 -> 달러
# TODO 문제 6: 성장률(%)과 72의 법칙도전
7. 이콘 카페의 손익분기점. 아메리카노 한 잔을 팔면 가격 3,000원에서 재료비 800원을 뺀 2,200원이 남습니다. 하루 고정비용은 250,000원입니다. 고정비용을 전부 메우려면 몇 잔을 팔아야 할까요. 250000 // 2200으로 잔 수를 어림하고, 250000 % 2200으로 그 잔 수까지 팔았을 때 얼마가 모자라는지 확인한 뒤, “정확히 몇 잔째부터 이익이 나는지”를 주석으로 적으세요.
8. 복리와 단리. 100만 원을 연 4% 금리로 18년 동안 맡깁니다. 이자가 이자를 낳는 복리라면 1000000 * 1.04 ** 18, 원금에만 이자가 붙는 단리라면 1000000 * (1 + 0.04 * 18)입니다. 두 값을 각각 출력하고, 차이가 얼마인지 계산한 뒤, 복리 결과가 72의 법칙(72 / 4 = 18년이면 두 배)과 들어맞는지 주석으로 평가하세요.
풀이는 부록 C에 있습니다. 다만 풀이를 펴기 전에 에러 메시지와 5분쯤 씨름해 보기를 권합니다. 그 5분이 실력이 됩니다.
# TODO 문제 7: 손익분기점 (// 와 %, 답은 주석으로)
# TODO 문제 8: 복리와 단리 비교 (평가는 주석으로)2.11 미니 프로젝트: 생각을 코드로, 코드를 글로
이 책의 모든 장은 작은 프로젝트로 끝납니다. 코드를 짜는 데서 멈추지 않고, 그 결과를 근거 삼아 세 문단짜리 글을 쓰는 것까지가 과제입니다. 경제학에서 계산은 언제나 주장을 떠받치는 근거이기 때문입니다. 예상 소요 시간은 30분에서 1시간 사이입니다.
과제: 나의 하루 가계부
어제 하루 동안 여러분이 실제로 쓴 돈과 번 돈을 파이썬으로 정리합니다. 기억이 어렵다면 최근에 지출이 많았던 하루를 골라도 좋습니다. 새 노트북을 만들어 다음을 순서대로 완성하세요.
- 지출 항목을 5개 이상 고릅니다(예: 학식, 편의점, 커피, 교통, 배달비). 수입이 있었다면 1개 이상 적습니다(알바, 용돈 등). 없었다면 0원으로 둡니다.
print()로 항목과 금액을 한 줄씩 출력해 표를 만듭니다. 머리글과 구분선도print()로 출력합니다.- 지출 합계를 덧셈으로 구해 출력합니다.
- 하루 수지(수입에서 지출 합계를 뺀 값)를 출력합니다.
- 가장 큰 지출 항목이 지출 합계에서 차지하는 비중(%)을 계산해 출력합니다. 괄호에 주의하세요.
출력은 대략 이런 모습이면 됩니다.
=== 7월 23일 나의 가계부 ===
학식(점심) 5500 원
편의점(야식) 4300 원
커피 3000 원
버스와 지하철 2900 원
배달비 3300 원
---------------------------
지출 합계 19000 원
알바 수입 61920 원
하루 수지 42920 원
가장 큰 지출 비중(%): 28.94736842105263
비중의 소수점이 길게 나와도 그대로 두세요. 보기 좋게 다듬는 방법은 2장에서 배웁니다. 항목 정렬이 조금 어긋나는 것도 지금은 신경 쓰지 않아도 됩니다.
글쓰기: 3문단 틀
표 아래에 텍스트 셀을 추가하고, 다음 틀에 맞춰 세 문단을 쓰세요.
- 1문단(주장): 내 하루 소비에서 가장 큰 항목은 무엇이고, 그것은 의도한 선택이었는지 습관이었는지. 두루뭉술하게 쓰지 말고 한 문장으로 분명하게 주장하세요.
- 2문단(근거): 코드가 출력한 수치를 두 개 이상 그대로 인용해 1문단의 주장을 떠받치세요. “많이 썼다”가 아니라 “지출 19,000원 중 5,500원, 약 29%를 차지했다”처럼 씁니다.
- 3문단(한계와 확장): 하루치 기록만으로는 말할 수 없는 것이 무엇인지 적으세요. 일주일치 기록이 있다면 무엇이 달라질지도요. 마침 4장에서 일주일치 시계열을 다루게 됩니다.
자기 점검 체크리스트
2.12 요약과 다음 장 예고
이번 장에서 우리는 파이썬을 “계산 과정이 글로 남는 계산기”로 썼습니다. print()는 따옴표 안의 글자를 그대로, 따옴표 밖의 식을 계산 결과로 출력하고, 쉼표는 라벨과 숫자를 한 줄에 이어 줍니다. 주석은 파이썬이 무시하는, 미래의 나를 위한 메모였습니다. 여섯 가지 산술 연산자와 괄호만으로 이콘 카페의 하루 이익 14,000원을 구했고, GDP 성장률 3%가 “24년 뒤 두 배”라는 뜻임을 72의 법칙과 1.03의 24제곱으로 확인했습니다. 처음 만난 세 가지 에러 — SyntaxError, NameError, ZeroDivisionError — 는 혼내는 소리가 아니라 고칠 위치를 알려 주는 안내문이며, 마지막 줄부터 읽는다는 요령도 챙겼습니다.
남은 아쉬움은 하나입니다. 판매량 120을 세 군데에 반복해 쓰는 바람에, 숫자가 바뀌면 코드를 일일이 찾아 고쳐야 했습니다. 다음 장에서는 값에 이름을 붙여 두고 어디서든 다시 쓰는 변수를 배웁니다. 이름을 붙이는 순간 코드는 “3000 곱하기 120”이 아니라 “가격 곱하기 판매량”이라는 경제학 문장으로 읽히기 시작합니다. 그때 명목과 실질의 구분, 그리고 오늘 미뤄 둔 이콘 카페 사장님의 기회비용 계산이 기다리고 있습니다.