바닥부터 시작하는 파이썬
*Udacity - Intro to Computer Science를 따라가고 있습니다.
https://classroom.udacity.com/courses/cs101
자 조금만 더 힘내면 자신만의 웹 크롤러를 만들 수 있다.
1. 프로시저 (procedure)
앞서 다른 언어에서 처럼 컴퓨터 언어는 내가 직접 어떤 명령을 수행(a+b를 하고 그 값을 다시 2로 나누라고 한다던지)하라고 뭔가를 코드를 짜서 정의해 놓고 계속해서 가져다 쓸 수 있다. 이를테면 + 또한 procedure 이다.
1+1 = 2
프로시저를 만드는 것은 간단하다. 이름(name) 하나를 정해서 내가 (이렇게 저렇게 - parameter) 움직여달라고 정의(defind)하면 된다.
def <name> (<parameter>): // 파라미터는 무서워보이지만 그냥 input 을 무섭게 부르는 단어라고 한다.
<block>
그다음에 따라오는 <block>이 있다. 이건 이 프로시저가 끝났다는 것을 의미한다.
HTML에도 C에도 있던 그것은 위에서 배운 간략한 사칙연산이나, 문자열 불러오기, 몇 번째에 해당 단어가 있는지 찾기 등을 조합해서 내가 원하는 명령, 그러니까 프로시저로 만들 수 있다. 정의된 프로시저를 사용하는 것은 간단하다.
<procedure>(<input>,<input>, ...) //프로시저를 def 할 때 몇 개의 변수를 필요로 했느냐에 따라 다름
여기서 input 들은 operands나 arguments라고 불린다. 이런 건 너무 딱딱한 내용이다. 바로 예시로 넘어가자. 프로시저가 뭐냐면..
그냥 이렇게 a와 b를 더한 값을 정의해서, sum(2,3)이라고 치면 프로시저에 정의한 대로 2와 3을 더해서 5를 보여준다거나, 정사각형의 넓이를 쉽게 구하는 프로시저로 square(4)라고 입력해서 4 곱하기 4의 결과 16을 얻어 낼 수 있는 프로시저들을 만들 수 있다. 아주 간단하다!
2. 프로시저로 한 번 새로운 것을 만들어보자
1장에서 배웠던 find를 예로 들면 더 쉽다
page.find('a',3)
이라는 뜻은 a를 3번째 위치부터 찾아라 라는 뜻이다. 이것으로 한 번 새로운 걸 만들어보자. def를 통해 rest_of_string(s)라는 s라는 변수 하나만 쓰는 프로시저를 정의해보자
def rest_of_string(s):
rest_of_string을 정의하고 그것에 스트링(s)을 대표하는 대푯값을 넣었다. 이것의 의미는 여기에 어떤 스트링이든 넣어도 된다는 뜻이다. 이걸 하나 정의해 두면 어떤 스트링으로도 호환이 가능하도록 (s)를 사용했다. 이것이 끝이 아니다. 어떤 작용을 통해 결괏값을 가져올지(return)까지 해줘야 한다. 그럼 1번 위치부터(컴퓨터는 0부터 시작하니까 2번째 글자부터) 불러오도록 해보자
def rest_of_string(s):
return s[1:] // 스트링에 쓰여있는 두 번째 글자부터 끝까지 불러오시오.
요렇게 하나를 완성했다. 그럼 연습 겸 여기에 아무 스트링이나 넣어서 프린트해보자
print rest_of_string('babocado')
결과는 다음과 같다.
abocado
아하, 아보카도는 언제다 옳다
3. 프로시저 안에 프로시저 넣기
프로시저 안에 프로시저를 넣어기도 한다.
4. 스트링(문자열)도 더할 수 있다.
5. 프로시저 안에 프로시저를 넣어 같은 단어 두 번째로 나오는 순간을 찾아보자
이렇게 프로시저 안에 프로시저 넣기로 같은 단어가 두 번 나오는 순간을 쉽게 코딩할 수 있다.
정말 열심히 고민해 가며 위와 같이 풀었는데 선생님은 저걸 간단하게 5줄로 바꿨다.
자 이것은 선생님의 답이다.
6. 더 짧게 할 수도 있다. - 프로그래밍의 묘미
프로그래밍은 짧고 간결하고 직관적으로 만드는 것이 묘미다. 선생님은 위에 제시 한 답을 더 짧게 만들었다.
심지어 더욱더 짧게 할 수도 있다.
하지만 사람이 이해하기 힘드니 더 짧은 곳에서 멈추자.
7. 여기까지 공부하며 느낀 유다시티(Udacity)의 장점 - 엄청난 양의 연습문제
유다시티의 장점은 엄청난 양의 퀴즈가 존재한다는 점이다. 정말 한 가지를 배우면 끝도 없이 응용문제를 풀게 한다. 이해될 때까지 풀게 한다. 최고다.
코드계의 구몬/눈높이 랄까! 나는 문제를 많이 풀어봐야 머리에 남아서 이런 방식이 매우 마음에 든다. 강의를 들으면 다 알 것 같지만 그건 실전에 적용해 볼 때까지는 자신이 다 이해했는지 정확히 알 수 없다. 실제로 나는 강의를 느끼면서 내가 천재인 줄 알았지만 막상 문제에 부딪히니 머리가 지끈거리고 소화가 불량되고 침대에 눕고 싶고 했다. 하지만 풀고 나니 세상 시원했다.
프로그래밍을 독학한다면 무한한 연습은 필수적이라고 본다. 혹시 시작할 예정이거나 시작했다면 Udacity에서 다량의 연습문제를 풀어보자. 그럼 자기가 정말 알고 있다고 생각한 것을 알고 있는지 알 수 있다.
자 그럼 다음 포스팅에서는 진짜 진짜 웹 크롤러를 만들어 보자.
*참고 상식! 파이썬의 서식
참고로 부모 아래 들어가는 자식들의 내용의 경우 프로그래머끼리 파이선에서는 '4번 띄어쓰기'를 써서 알아보기 쉽게 하기로 약속했다고 하니 참고 바란다.