참으로 뜬금없는 술사진. 굳이 따지자면 어제 술자리 사진.

파이썬 두 번째 기사를 쓴지 두어달. 파이썬 3편은 밀린 숙제 같았다. 그 사이 내 기사를 보고 파이썬에 입문했다는 페친 독자님은 나보다 진도가 훨씬 많이 나갔다. 밀려드는 자괴감. 왜 이렇게 됐을까, ‘파이썬, 일주일하고 포기할거다’라고 댓글을 단 어느 독자님의 말이 사실로 입증되는 건가.

곰곰히 생각해보니 내가 수포자가 된 그 단어가 4장의 제목이었다.

함. 수.

원래 사람이란게 겁을 먹으면 할 것도 더 못하게 된다. 이 장을 펴자마자 나오는 단어가 ‘def’다. 함수를 만들 때 쓰는 키워드인데, define(정의)의 약자다. 근데 나는 쫄아서 저게 defunction(세상엔 없는 단어…ㅠㅠ)의 약자라고 생각했다. 함수가 영어로 function인데, 이걸 defunction으로 착각한 거다. 아, 창피해.

일단, 이 장의 첫 미션은 함수를 이용해 구구단 코드를 짜는 것이다.

함수는, 어느 별에서 온 단어일까. 단어 자체가 너무 어렵다. 그냥 쫄린다. 그런데 함수는 영어로 function, 즉 ‘기능’이다. 그러니까 def라는 키워드는 “이것은 어떤 ‘기능’을 하는 모듈”이라고 정의하는 거다. 그냥 영어 그대로 ‘기능’이라고 하면 될 걸,  왜 함수라는 어려운 말로 번역을 해서 사람을 이렇게 헛갈리게 만드는 걸까. 내가 지금 파이썬 공부하기 싫어서, 이렇게 잡담하는 것만은 아니다.

어찌됐든, 파이썬 IDLE를 대화형 모드로 열고, 책에서 시킨대로 코드를 넣어보았다.

함수로 짜본 구구단 12단

보았는가! 내 손으로 만든 구구단!

다음엔, 심지어 인수를 두 개 넣어서, 아무 숫자나 무한대로 곱하는 수식도 만드는 법을 가르쳐준다. 잘 보시오들.

1257을 정말 99번 곱하였다.

자, 왼쪽 사진이 보이시는지. 무려 1257의 99단이다! 흥분해서 그만 너무 긴 숫자를 넣었다. 

여튼, 그게 중요한 것이 아니고, 나같은 생 초짜도 구구단 정도는 함수로 짤 수 있다는 것이 이 글의 유일한 교훈(?)이다.

구구단을 만든 코드는 아래와 같은데,

def times_tables(num):

n=1

while n<=10:

print(n, “x”, num, “=”, n*num)

n=n+1

요 원리를 좀 살펴보면,

def는 정의란 뜻이니까, def times_tables

내가 ‘구구단(영어로 times tables)을 정의한다‘라는 뜻이된다.

* 괄호 안 문자는 숫자(number)를 뜻한다.

그러니까, def times_tables(num)은, 사용자가 입력한 어떤 숫자(num)의 구구단을 만들어내는 기능을 가진다, 라는 약속인 것이다.

저 안에는 어떤 숫자가 들어가든, 그 숫자의 구구단이 만들어질 수 있다.

다음엔, while, 조건절이다.

while n<=10: 란 얘기는 구구단을 몇번 곱할 것인가 하는 문제다. 저기서 n은 1에서 시작하고 10보다는 작거나 같으니까, 구구단 몇단이든 상관없이 1부터 10까지 곱하는 거다.

그리고 나오는 키워드는 print다. 출력이란 뜻이다. 화면에 어떻게 보여질지 그 그림을 그린다고 보면 된다.

print(n, “x”, num, “=”, n*num) 요렇게 명령했을 때, 화면에 나오는 결과물은

1 x 5 = 5
2 x 5 = 10
3 x 5 = 15

같은 형식이다. 우리가 숫자는 위에서 n과 num으로 지정해줬지만, 곱하기나 등호 같은 부호는 미리 지정해주지 않았으니까 큰 따옴표 안에 넣어서 출력하게  하는 거라고 보면 된다.

여기까지 만들고, 오랜만에 의기양양해서 친구들한테 자랑해보았다. 그랬더니, 친구가 말했다. “방탄소년단 뷔, 잘생겼다를 백번 나오게 만들어줘”라고.

방탄소년단이시여, 뭐 이리 누추한곳까지 오셨나이까. [사진출처=빅히트엔터테인먼트 홈페이지]

구구단 만드는데 5분 걸렸다면, 뷔 잘생겼다, 라고 만드는데 30분 걸렸다. 숫자가 아니라 문자가 그게 가능할 것인가하고 머리를 굴리는데 동공에선 지진이 일어나고 머리에선 해일이 일었다.

자, 침착하자 남혜현.

잘 생각해보자.

‘방탄소년단 뷔 (가 나오면) 잘생겼다(를 출력하면 된다)’

그렇다면, 구구단을 조금 변형하면 되지 않을까? 숫자 대신 이름을 넣으면??

def igusnjinri(name):

n=1

while n<=10:

print(name, 잘생겼다)

n=n+1

왜죠? 왜 에러인거죠?

훗, 그러면 그렇지. 한 번에 성공할리가. 뭐가 잘못됐을까. 솔직히 이번엔 검색해봤는데도 잘 모르겠더라. 그래서, 지인 찬스.

이 코드의 오류는 따옴표에 있었다. 홑따옴표든, 겹따옴표든 문자를 따옴표 안에 넣어줘야 한다. 따옴표는 파이썬 입력기에 다음에 들어가는 것은 문자요, 하고 미리 싸인을 주는 것이라고 한다.

코딩 배우니까 이런게 좋구나 허허허

자, 오늘은 여기까지. 꾸준한 학습이 중요한 이유가 뭐냐면, 오랜만에 다시 책을 펴니까, 무슨 말인지 다시 모르겠어서 자꾸 앞부분을 다시 열어보게 된다. 그러니까, 까먹기 전에 꾸준히 공부해야 한다. 누가 누구보고 꾸준히 공부하래? 나나 잘하자. 4편에서 뵐께요, 곧! ㅋㅋ

[참고기사]

파이썬, 일주일만 하면 남혜현도 할 수 있을까?

나와 파이썬과 빨간 에러 메시지

글. 바이라인네트워크
<남혜현 기자> smilla@byline.network


--------------------------------------------------
[무료 웨비나] 통합 분석을 통한 효율적인 IT 운영·정보관리 방안
  • 일시 : 2020년 12월 3일 14시~15시
등록하러 가기