*Udacity - Intro to Computer Science 를 따라가고 있습니다.
https://classroom.udacity.com/courses/cs101
1. loops -코드계의 무한 동력 : while
루프는 말 그대로 무한 반복하는 것이다. 혹은 조건을 걸어 조건이 만족할 때까지만 반복하게 만들 수도 있다. 구조는 간단하다
while <TestExpression>:
<Block> // 이를테면 return이나 print나..
조건이 ture라면 끊임없이 반복된다. 그러다가 false가 뜨면 드디어 while의 굴레를 벗어나게 된다. 가장 간단한 예로는 숫자 세기가 있다.
i = 0
while i<10:
print i
i=i+1
>>>0
>>>1
>>>2
.
.
>>>9
이렇게 되면, 0을 먼저 프린트하고, 그다음에 1 더 해, 1이 while을 돌기 시작한다. 그럼 1을 프린트하고 다시 1을 더해 2가 while을 돌고, 2를 프린트하고 2에 1을 더해 3이 while을 돌고.... 그러다가 9에 1을 더해 10이 되는 순간, 10보다 작을 때, 라는 조건에서 false가 뜨므로 드디어 while의 굴레에서 벗어나 컴퓨터가 쉬게 되는 것이다.
2. 혹시 factorial 기억나세요?!
확률과 통계 중 확률 파트에서 주로 나오던!(느낌표) 녀석, 4! 은 4x3x2x1이었던 그 기억. 그 팩토리얼을 파이썬에서 구현해보자. 나중에 파이선으로 확률 같은 것도 구해야 할지 모르니까. 만들어 놓으면 다 도움이 된다.
def factorial(n):
result = 1
while n >=1 :
result = result * n
n = n - 1
return result
사실 나는 겨우 이걸 만드느라 엄청 머리 싸매고 고민했었다. 아 프로그래머들은 진짜 다 천재구나 이걸 어떻게 이렇게 하지... (하지만 괜찮다. 걱정 마시라 다 할 수 있다!)
2. 루프를 깨 보자 break!
값이 참(ture) 일 동안 계속해서 돌아가는 loop를 break를 통해 깨볼 수 있다. 아래는 구조다.
while <TestExpression>:
<code>
if <breakTest>:
break
<more code>
<after while>
열심히 while을 돌리고 있다가, 앗 잠깐 if 조건을 달성했는걸? 하면 잠깐 멈췄다가 다시 while을 이어나가는 것이다. 코드가 잘 돌고 있는지 궁금할 때 이런 걸 사용한다고 한다.
3. 내가 짠 코드가 선생님 코드보다 간략할 때 느끼는 희열!!
어떤 문장에 특정 글자가 마지막으로 나오는 것을 검색하는 문제 find_last라는 프로시저를 만드는 것인데 아래와 같이 동작하게 만들어야 한다.
- 'aaaa'를 넣으며 3이 나온다.
:'aaaa'에서 'a'가 마지막으로 등장하는 건 3(4번째 자리)이다 (컴퓨터는 0부터 숫자를 센다 0,1,2,3이 4번째 숫자다).
- 'aaaa'에서 'b'가 언제 마지막으로 나오냐고 물으면 -1 즉 '안 나와요'라고 컴퓨터가 말하게 해야 한다.
그래서 내가 짠 코드는 이러하다
막 머리 싸매가며 만들고 나서 선생님의 해설을 봤는데.... 선생님....?
이게 더 복잡한데요?!?! 제가... 더 간단하게 잘 짠 것 같은데요?
그러고 나서 스멀스멀 피어나는 내적 흐뭇함이란...
후후... 괜찮아 컴퓨터 사이언스 내 적성에 맞는 것 같아. 아직 더 배워도 될 머리가 되는 것 같아... 정말 바보는 아니었구나 나!라는 은근한 자신감이 솟아오른다. 좋아 이런 기쁨을 틈타 정신없을 때 어서 다음 진도로 넘어가도록 하자.