이 노트북은 제이크 반더플라스(Jake VanderPlas)의 A Whirlwind Tour of Python(OReilly Media, 2016)를 기반으로 만들어졌습니다. 이 내용은 CC0 라이센스를 따릅니다. 전체 노트북의 목록은 https://github.com/rickiepark/WhirlwindTourOfPython 에서 볼 수 있습니다.

< 기본 데이터 구조 | 목차 | 함수 >

제어문

제어문은 프로그래밍에서 아주 중요합니다. 제어문이 없다면 프로그램은 그저 실행문을 순서대로 실행할 뿐입니다. 제어문 때문에 특정 코드 블럭을 조건에 따라서 또는 반복적으로 실행시킬 수 있습니다. 이 기본적인 구성 요소가 연결되면 놀라울 정도로 복잡한 프로그램을 만들 수 있습니다!

여기에서 조건문("if", "elif", "else")과 반복문("for"와 "while" 그리고 부수적으로 "break", "continue", "pass")을 다루겠습니다.

조건문: if-elif-else:

종종 if-then 문이라 불리는 조건문은 불리언 조건에 따라 어떤 코드 블럭을 실행합니다. 기본적인 파이썬의 조건문은 다음과 같습니다:

특히 콜론(:)과 공백이 코드 블럭을 정의하는 것을 주목하세요.

파이썬은 다른 언어에서도 많이 사용하는 if와 else를 사용합니다. 특이한 것은 "else if"의 축소판인 elif를 사용합니다. elif와 else 블럭은 선택적입니다. 또한 원하는 만큼 elif를 포함시킬 수 있습니다.

for 루프

파이썬은 루프를 사용하여 일부 코드를 반복적으로 실행시킬 수 있습니다. 예를 들어, 리스트에 있는 아이템을 하나씩 출력하기 위해 for 루프를 사용할 수 있습니다:

for 루프는 단순합니다. 사용할 변수와 반복하기 원하는 시퀀스를 지정하고 "in" 연산자를 사용하여 직관적이고 읽기 좋게 이 둘을 연결합니다. 조금 더 자세히 말하면 "in" 연산자의 오른쪽에 있는 객체는 어떤 파이썬의 반복자(interator)도 될 수 있습니다. 반복자는 일반화된 시퀀스라고 생각할 수 있습니다. 이에 대해서는 반복자에서 자세히 다루겠습니다.

예를 들면, 파이썬에서 가장 널리 사용하는 반복자 중에 하나는 연속된 숫자를 생성하는 range 객체입니다:

범위는 기본적으로 0부터 시작합니다. 관례상 범위의 최댓값은 포함하지 않습니다. Range 객체는 조금 더 복잡한 방식을 지원합니다:

range 매개변수의 의미는 리스트에서 다룬 슬라이싱과 매우 비슷합니다.

range() 함수가 파이썬 2와 파이썬 3의 다른 점 중 하나입니다. 파이썬 2에서는 range()가 리스트를 만들지만 파이썬 3에서는 range()는 반복 객체(iterable object)를 만듭니다.

while 루프

파이썬의 다른 종류의 루프는 일정 조건이 만족할 때까지 계속 반복하는 while 루프입니다:

while 루트의 매개변수는 불리언 표현으로 평가됩니다. 이 표현식이 False로 평가될 때까지 루프가 실행됩니다.

break와 continue: 루프를 세밀하게 조정하기

루프안에서 실행 과정을 세밀하게 조정하기 위해 사용할 수 있는 유용한 두 개의 문장이 있습니다:

이 두 문장은 for와 while 루프에 모두 쓸 수 있습니다.

다음은 continue를 사용하여 홀수를 출력하는 예제입니다. 이 경우 if-else 문장을 사용해서도 동일한 결과를 만들 수 있지만 continue가 아이디어를 표현하는데 조금 더 편리할 수 있습니다:

다음은 조금 더 쉬운 문제에 사용된 break의 예시입니다. 이 루프는 특정 값까지의 피보나치(Fibonacci) 수열을 리스트에 채우는 것입니다:

break 문이 없는 while True 루프를 사용하면 영원히 반복될 것입니다!

else 블럭이 있는 루프

파이썬에서 드물게 사용되는 패터는 for나 while 루프에 else 문을 사용하는 것입니다. 앞서 else 블럭에 대해 이야기 했습니다. 이 블럭은 if와 elif 문이 False로 평가될 때 실행됩니다. 루프에서 else는 파이썬에 있는 혼돈을 일으킬만한 이름 중 하나입니다. nobreak라고 생각하는 것이 좋습니다. 즉 else 블럭은 break 문을 거치지 않고 루프가 자연적으로 종료됐을 때에만 실행됩니다.

이 문장이 유용한 한 가지 예로 다음 소수를 찾기 위해 잘 알려진 에라토스테네스의 체(Sieve of Eratosthenes) 알고리즘의 (최적화되지 않은) 구현을 생각해 보겠습니다(에라토스테네스의 체 위키문서 참조):

else 문은 나눌 수 있는 수가 없는 경우에만 실행됩니다. while 루프에서도 비슷하게 else가 동작합니다.

< 기본 데이터 구조 | 목차 | 함수 >