[Python101] 로직(2) – 반복문

지난 시간에는 조건을 통해 갈림길 중 한쪽으로 진로를 결정하는 조건문에 대해 살펴 보았다. 이번 시간에는 반복문에 대해 알아보도록 하겠다.

반복문은 쉽게 말해서 같은 (혹은 비슷한) 작업을 여러 차례 반복하도록 지시하는 구문이다. 파이썬의 반복문은 조금 독특한 구석이 있는데, 이는 설명을 하면서 이야기하도록 하겠다.

while 문

중고등학교 때로 기억을 거슬러 올라가보면 (요즘은 어떤지 모르지만) 그 때는 컴퓨터 시간에 BASIC을 배웠는데, 이 때도 FOR 문이라는 게 있었다. 그 이후로 반복문의 대명사는 사실 for 인데, 파이썬의 for는 약간 다른 (그리고 좀 멋진) 부분이 있어서 먼저 while 문을 살펴보도록 하겠다.

while 문은 어떤 조건이 있고, 이 조건이 참인 동안에는 지정된 명령을 계속해서 반복하도록 하는 구문이다. while 문은 다음과 같이 쓴다.

while 조건식:
    반복하는 명령

파이썬 인터프리터가 조건식을 만나면 조건식을 판별한다. 조건식의 결과가 참인 경우에는 반복 명령을 한 번 수행한 후 다시 조건식을 판별한다 결과가 참인 경우에는 이를 반복하고 거짓인 경우에는 더 이상 다음 명령을 수행하지 않고 그 다음 블럭으로 건너뛰게 된다.

다음은 가장 간단한 while 문의 예라 하겠다.

x = 1
while x =<40:
    print x
    x = x + 1

이 소스를 따라가보자. 먼저 x 에는 1이라는 값이 대입된다. 그런 다음 반복문을 만난다. x 는 40보다 작으므로, 3, 4 번 라인이 실행된다. 1이 출력되고 x 에는 x + 1 값(= 2)이 대입된다. 조건 식은 여전히 참이므로 계속해서 값이 출력된다. 40번째 반복에서 x = 41이 되고 더 이상 조건식을 만족하지 않으므로 반복구간 (반복 구간은 흔히 ‘루프’라고 부른다.)은 종료된다.

반복문의 중첩

반복문의 블럭 안에는 다른 반복문이 들어가도 된다. (물론 조건문이 들어갈 수도 있다.) 당연한 이야기를 써 놓으니 이상한데, 구구단을 출력하는 프로그램을 생각해보자

각 단은 *2, *3 … *9 한 값을 출력한다. 이는 반복문을 통해서 처리할 수 있다. 그리고 각 단은 2단 부터 9단까지 반복된다. 역시 반복문을 통해 처리한다. 즉 구구단 프로그램은 다음과 같이 구상할 수 있다.

  1. while 문을 통해 각 단의 값에 2~9를 곱해서 출력하도록 할 수 있다.
  2. 1의 작업을 다시 2~9단에 걸쳐서 반복한다.

실제 소스 코드는 다음과 같다. ex14.py는 while 문을 사용해서 구구단을 출력하는 프로그램이다.

#-*-coding:utf-8
#ex14.py
i = 2 # 각 단의 번호
while i < 10j = 2 # 각 행의 번호, 새로운 단을 시작할 때 2로 초기화한다.
    while j < 10:
         print "%d * %d = %d" % (i, j, i*j)
         j = j + 1
    print # 각 단이 끝나고 나면 한 줄을 띄운다.
    i = i + 1

소스를 분석해 보자

  1. 4행에서 i는 2단, 3단… 각 단을 나타내는 값이다. 구구단은 2단부터 시작하므로 2로 초기화한다.
  2. while 문을 통해  i 가 10보다 작을 때까지 반복한다. 반복문 안에는 각 단을 출력하는 부분이 들어가면 된다.
  3. 6행에서 다시 j=2로 초기화한다. 이는 각 단에서 매 행마다 곱해질 값이다.
  4. 7행은 while문을 통해 j=2,3,4…,9까지 반복하도록 한다.
  5. 중첩된 while문의 내부에서는 구구단의 각 행을 출력한다. 포매팅 문자열을 사용하여 깔끔하게 처리했다.
  6. 9행에서 한 줄의 문장을 출력한 다음에는 j에 1을 더한 값을 다시 대입한다.
  7. 이런 식으로 7~9행이 반복된다.
  8. 반복이 끝나면 11행을 만나는데 이 때 빈줄을 한 줄 출력한 다음, i에는 다시 1을 더해준다. 2단이 끝났으니 이제 3단을 출력할 차례이다.
  9. 위의 과정을 반복한다. 9단을 출력하고나면 맨 마지막에 i = 9 + 1 이된다. while의 조건을 만족하지 않으므로 반복문이 끝나게 된다.

말로 풀어서 설명해도 사실 명쾌하지는 않다. 대신 소스 코드를 보면서 하나 하나 추적해보면 어떤 식으로 흘러가는지 감이 올 것이다.

for 문

for 문은 조건을 사용하지 않는 반복문이다. (사실 다른 언어의 for 문은 대부분 조건을 사용한다.) for 문은 대신 “집합”을 사용한다. for 문의 사용방법은 다음과 같다.

for 변수 in 집합:
    *변수*를 사용하는 명령

파이썬의 for 문은 특별하다. 즉 어떤 집합에 대해 그 집합의 개개의 원소에 대해 같은 동작을 반복한다. 즉 어떤 조건을 만족하는 동안 반복하는 것이 아니라 집합의 원소에 대해 개별적으로 어떤 동일한 처리를 하고자 할 때 유용하다.

예를 들어서 1에서 500까지의 숫자를 모두 더하는 코드를 작성해보자.

sum = 0
for x in range(1,501):
    sum = sum + x
print sum

range()라는 함수가 처음나왔다. 대화형 쉘에서 help(range)해보면 알 수 있는데, 시작 값과 끝 값 사이의 범위를 “집합”으로 만들어주는 함수이다. 이 때 range() 함수의 끝 값은 실제로 범위에 포함되지 않는다. 따라서 range(1,501)은 [1,2,3,…,500] 까지의 집합을 나타낸다.

다시 for 문을 보자. x in range(1,501) 이라고 하였으니, 1,2,…500까지의 숫자 값이 x가 되어 매번 루프를 반복하게 된다.

다시 코드를 설명하면,

  1. sum은 합계값을 저장하는 변수이다. 0으로 초기화한다.
  2. 1~500 사이에 숫자에 대해 for 문으로 반복한다. 이 값들은 x에 대입된다.
  3. 매번 루프에서 x값을  sum에 더해서 sum에 대입한다. 즉 sum은 점점 값들이 쌓여간다.
  4. 루프를 다 돌고나면 sum을 출력한다.

이해가 좀 되었는지?

이 for 문을 사용하면 구구단 출력 프로그램은 훨씬 간단하게 작성할 수 있다.

for i in range(2,10):
    for j in range(2,10):
        print "%d * %d = %d" % (i, j, i*j)
    print

이제 위 코드를 읽고 무슨 말인지 이해할 수 있을 것이다.

“집합”

사실 파이썬에서는 iterable이라고 표현하는데, 이를 마땅히 번역할만한 마땅한 단어가 없어서 집합이라고 일단 해 두도록 한다. for 문은 이 집합의 각 원소를 돌아가며 반복하는 반복문이다. 파이썬에서 이 “집합”은 상당히 중요하다. for 문 뿐만 아니라 이런 집합들의 원소에 대해 개별적인 처리를 할 수 있는 방법들이 꽤 있으며, 이런 것들을 잘 활용하면 코드의 수를 크게 줄일 수 있다.

우선 반복문에 대한 기초적인 내용을 배웠으니, 다음은 정말 중요하다는 “집합”에 대한 내용을 조금 집중적으로 다뤄보도록 하겠다.

[Python101] 006 로직(1) – 조건과 조건문

사실, “자료의 유형”에 대해 먼저 다루어야 하는 게 아닌가 싶기도 하지만 그보다든 더 ‘일반적인’ 내용을 다루는 게 맞겠다는 생각에 로직을 먼저 설명하기로 결정했다. 자료의 유형은 사실 대부분의 프로그래밍 서적에서 맨 먼저 다루는 형태인데, 파이썬에서는 일부 매우 중요한 자료형을 제외하고는 ‘개념’만 이해하면 될 정도로 기본적인 내용은 단순하기 때문에 이 부분들은 차근차근히 알아 나가면 될 것 같아서 먼저 로직에 대해 설명해보기로 하겠다.

프로그램은 사람이 정의해준 절차에 따라 컴퓨터가 연속적으로 일을 처리해 나가도록 하는 일종의 “작업 지시서”이다. 당연하게도 파이썬은 소스코드에 명시한대로 일을 처리해 나간다. 하지만 항상 모든 프로그램이 “정해진 일을 순서대로 처리하기만”하는 것은 아니다. 특정한 조건에 따라서 조금씩 다르게 일을 처리해야 하는 경우가 있다. 또한 반복적인 처리를 언제까지 혹은 몇 번이나 반복해야 하는지를 매번 판단해야 하는 상황이 있을 수 있다.

즉 프로그램의 흐름(flow)은 항상 직선으로 나아가는 것이 아니라 많은 상황이나 조건에 따라서 갈림길 중 하나를 택해서 진행되거나, 같은 코스를 수차례 뱅글뱅글 돌게되는 상황이 있을 수 있는 것이다. 이러한 프로그램의 흐름을 결정하는 원리를 “로직”이라고 부른다. 그리고 이 “로직”은 기본적으로 “논리적 판단”을 따르게 된다.

논리적 판단, 참과 거짓

이 때 말하는 논리적 판단이란 아주 간단히 “참”이냐 “거짓”이냐 그 자체이다. 컴퓨터는 이 두가지 경우만은 판단할 수 있다. 모든 것이 딱 부러지게 참 아니면 거짓이되는 것이다. 파이썬에서 참은 True 거짓은 False라고 정의되어 있다. 그리고 이런 참, 거짓을 계산(?)하기 위해서 비교 연산과 논리 연산이라는 것을 하게 된다.

True 와 False 는 참고로 파이썬에는 0, 1 처럼 미리 약속되어 있는 값이다. False는 0 또는 None 과 유사한 개념으로 이해하면 된다. True는 1 혹은 0이 아닌 어떤 것이 될 수 있다.

비교 연산

참이다 거짓이다라는 것은 수학 시간에 배우는 명제의 참과 거짓과는 닮았으면서도 비슷하다. 논리적으로 참과 거짓을 결합하여 계산하는 방식은 수학의 그것을 닮았지만, 컴퓨터는 사람의 언어로 만들어진 명제를 이해하지 못한다. 다만 “3은 2보다 크다”라는 명제를 “3 > 2″라는 수식으로 써 줄 때 이를 계산하여 그것이 참인지 거짓인지를 판별할 수 있는 것이다. 결국 어떤 값이 어떤 값과 같다 / 크다 / 작다를 판별하는 것만이 판단의 기준이 된다.

이러한 판단을 위해서 비교 연산자라는 것을 사용한다. 비교 연산자에는 다음과 같은 것들이 있다.

  • == : 등호(=)를 2개 연속으로 사용하여 A == B 와 같은 형식으로 사용한다. 실제로 A 와 B가 동일한 값이라면 이 식은 참(True)이 된다.
  • >, >= : 크다와 크거나 같다를 의미한다. A >= B 는 A>B 이거나 A==B이면 참이 된다.
  • <,<= :  작다와 작거나 같다를 의미한다.
  • != : 같지 않다는 의미이다.

대화형 쉘에서 다음 수식들을 평가해 도록 하자. 수식을 입력하고 엔터를 치면 True 혹은 False로 결과값이 출력된다. 수식을 실제로 실행하여 평가하기 전에 결과가 True 인지 False인지 먼저 생각해보고, 실행한 결과가 자신의 생각과 맞는지 확인해보자.

  • 1 == 13
  • 13 == “13”
  • 4 > 5
  • -2 <= -2
  • 2 == 2
  • -4 * 0 >= 0
  • ‘Hello’ == “Hello”

논리연산자

비교 연산자는 쉽다. 하지만 현실은 그리 녹록하지 않다. 단순비교를 넘어서 많은 경우에 2개 혹은 3개 가량의 조건을 동시에 고려해야 하는 경우가 많다. 논리 연산자는 여러 개의 조건을 동시에 평가하는데 사용한다. 예를 들자면 가스 밸브의 압력이 10~20 사이일 때가 정상이라고 할 때 가스 밸브의 압력이 정상인지를 판단하기 위해서는 다음의 두 조건을 동시에 만족해야 한다.

  1. 밸브압력 >= 10
  2. 밸브압력 <= 20

이 두 개의 조건을 하나로 묶어주는 것이 논리 연산자이다. 논리 연산자는 역시 의외로 간단하다.

  • AND : A AND B – A도 참, B도 참인 경우에만 참이된다. A가 참, B가 거짓인 경우에는 A AND B는 거짓이다. 즉 2개의 조건이 모두 참인 경우만 참이 된다.
  • OR : A OR B – A, B 둘 중의 하나만 참이면 참이다. OR은 “~ 혹은 ~”의 뜻이므로 글자 그대로 생각하면 된다.
  • NOT A : A의 논리값을 뒤집는다. A가 참이면 NOT A는 거짓, A가 거짓이면 NOT A는 참이된다.

그리고 비교 연산자와 논리 연산자들을 결합하여 보통 우리는 “조건”을 만들어 낼 수 있다. 하나의 조건은 비교 연산을 통해 참/거짓으로 구분되는 식이며, 여러 개의 조건은 다시 논리 연산자를 통해 하나의 조건으로 합성될 수 있다.

위에서 언급한 가스 밸브의 경우, 조건식은 다음과 같이 만들어진다.

{밸브 압력} >= 10 and {밸브 압력} <= 20

밸브의 압력이 10~20 사이의 값일 때만 두 식을 모두 만족하게 되는 것이다.

자 이제 다시 다음 20개의 식의 결과가 True 인지 False 인지 각각 생각해보고 대화형 쉘에서 실행하여 그 결과를 확인해 보라.

  1. True and True
  2. False and True
  3. 1 == 1 and 2 == 1
  4. “test” == “test”
  5. 1 == 1 or 2 != 1
  6. True and 1 == 1
  7. False and 0 != 0
  8. True or 1 == 1
  9. “test” == “testing”
  10. 1 != 0 and 2 == 1
  11. “test” != “testing”
  12. “test” == 1
  13. not (True and False)
  14. not (1==1 and 0 != 1)
  15. not (10==1 or 1000 == 1000)
  16. not (1 != 10 or 3 == 4)
  17. not (“testing” == “testing” and “Zed” == “Cool Guy”)
  18. 1 == 1 and not (“testing” == 1 or 1 == 0)
  19. “chunky” == “bacon” and not (3 == 4 or 3 == 3)
  20. 3 == 3 and not (“testing” == “testing” or “Python” == “Fun”)

조건문

조건식에 대해서 기본적인 내용을 (사실 저게 전부임) 알아보았으니, 조건에 따른 분기를 어떻게 만드는지 살펴보도록 하겠다.

거의 모든 프로그래밍 언어는 조건문을 처리할 수 있는 문법을 가지고 있고, 대부분의 언어가 if….를 사용한다. 파이썬도 마찬가지로 if 문을 사용한다. 파이썬의 if 문의 사용 방법은 다음과 같다.

if 조건 :
    조건이 참일 때 실행할 문장 #그리고 앞에는 들여쓰기를 한다.

if 다음에 조건 식을 쓴 다음 콜론(:)으로 끝난다. 그런다음, 조건이 참일 때 동작할 문장들을 들여쓰기 해서 써 준다. if 구문의 완료 지점은 들여쓰기를 하지 않는 라인을 만날 때 까지이다.

위의 if 문을 사용하면 조건이 참일 때에만 특정한 명령들을 실행할 수 있게 된다. 만약, 조건이 참일 때는 A라는 동작을 하고 조건이 거짓일 때는 B라는 동작을 수행하도록 하려면 어떻게 할까? 이 때는 else 문을 쓴다.

if 조건:
    조건이 참일 때 실행할 명령 ...
else:
    조건이 거짓일 때 실행할 명령 ....

그리고 많은 경우에는 조건 1, 조건 2, 조건 3… 등 각각의 경우에 따라 다른 동작을 하고 싶을 때도 있을 것이다. (예를 들어 점수의 영역에 따라 수우미양가를 매길 때처럼) 이 때는 다음과 같이 elif를 사용하여 제2, 제3의 조건을 붙여 나갈 수 있다.

if 조건1:
    조건 1이 참일 때 실행할 명령
elif 조건2:
    조건 1이 거짓일 때, 다시 조건 2를 검사하여 조건2가 참일 때 실행
elif 조건3:
    다시 조건 3일 때 명령
...
else:
    위의 모든 조건이 거짓일 때 실행하는 명령

만약 어떤 점수에 따라 학점을 A,B,C,D,F 로 나눠주는 코드를 작성한다면 다음과 같이 될 것이다.

#ex12.py
#-*-coding:utf-8

def checkGrade(point):
  if point >= 90:
    return "A"
  elif point >= 80:
    return "B"
  elif point >=70:
    return "C"
  elif point >=50:
    return "D"
  else:
    return "F"

myPoint = 85

print "My Point is %d, so my grade is %s" %(myPoint, checkGrade(myPoint))

ex12.py는 지금까지 배운 내용들은 나름 잘 요약하고 있는 예제라 할 수 있겠다. 먼저 점수에 따라 학점을 판별하는 처리는 checkGrade()라는 함수를 만들어서 처리한다.

이 함수는 조건문을 계속 사용하여 90점 이상인 경우에는  A, 80점 이상인 경우에는 B…와 같은 식으로 등급을 문자열로 반환해준다. 함수가 return 문을 만나면 결과값을 반환하고 더 이상 실행되지 않는다.

그리고 myPoint에 점수를 대입한 뒤, 점수와 그 처리 결과를 하나의 문장에서 print 하도록 했다.

조건문은 단순히 조건식을 평가하여 참/거짓의 여부에 따라 갈림길의 방향을 선택하는 장치라고 볼 수 있으며, 다양한 상황을 유연하여 처리할 수 있게끔하는 기본적인 프로그램의 논리 처리이다. 프로그램은 이 조건문과 다음에 배울 반복문을 통해 사람이 일일이 간섭하지 않고 (내지는 사람에게 매번 귀찮게 물어보지 않고) 알아서 많은 처리를 빠르게 할 수 있게 된다.

다음 순서는 반복문에 대해 배워보도록 하겠다. 그리고 반복과 조건을 결합하여 할 수 있는 몇 가지 재밌는(?) 실험들을 조금 해 볼 것이다.

[Python101] 001. 문자를 출력해보다.

출력해보기

아마도 C언어가 세상에 알려질 때 “Hello World!”라는 문장을 출력하는 시연을 했던 것이 시초가 되어 프로그래밍 언어를 시작하는 개발자들은 맨 먼저 이 문장을 출력해보는 코드를 작성하곤 한다고 한다. 이는 단순히 관습이라기보다는 보다 중요한 의미를 갖는다. 프로그램은 기본적으로 “어떤 처리를 해주는 기계 장치”에 가까운 개념이다. 그러니까 입력→처리→출력의 과정을 통해서 작업을 수행한다.

문자열을 찍어서 표시하는 기능은 이 출력의 중요한 부분을 차지하게 된다. 그런데 문제는 뭔가를 ‘출력’할 때는 그 표현 양식이 중요하다는 점이다. 그래서 프로그래밍 언어마다 문자열을 포매팅(서식화)하는 부분은 나름 상당히 중요하게 다뤄지고 있고, 이 부분은 깊게 공부하고자 한다면 상당히 살펴야 하는 분량이 많다. (문자열을 다루는 것 자체가 생각보다 범위가 많고 또 그만큼 중요하다.) 따라서 프로그래밍을 통해 실제로 쓸모 있는 것을 만드는 것을 가정한다면 입출력과 관련한 부분은 꽤나 중요하다고 볼 수 있다. 그래서 다른 개념들에 앞서서 이 부분을 좀 먼저 다뤄 봐야 할 것 같다.

ex01

가장 먼저 print 명령에 대해 살펴보도록 하겠다. print 명령은 정해진 문자열을 콘솔 화면에 출력해주는 명령이다.

print {출력할 것}

위와 같은 형식으로 쓰며, 실제로 중괄호 {}는 쓰지 않는다. 이 중괄호는 명령이나 구문에서 직접 넣어줘야 하는 것을 의미하는 형식상의 표현이라 보면 된다.

우리가 (공식적으로는) 처음으로 작성해볼 ex01.py는 간단히 텍스트를 출력해주는 프로그램이다. 한줄 한줄 정확하게 타이핑해 보도록 하자. (화면이 좁아 읽기 불편하다면 텍스트 편집기에 붙여 넣은 다음, 실제로 그 내용을 보면서 꼭 직접 타이핑하도록 한다. 맥용 IDLE에서는 한글 입력이 안되는 문제가 있는데, 불가피한 경우에는 텍스트 에디터에서 작성 후 IDLE에서 붙여 넣자.)

#!/usr/bin/python
#-*-coding:utf-8

# 1번 행은 터미널에서 바로 실행될 수 있도록 함
# 2번 행은 주석이나 문자열에 한글을 쓸 수 있도록함
# 윈도의 경우에는 -*-coding:cp949 로 해야 함

# 문자열을 출력할 때는 print 명령을 사용한다.
# 문자열은 겹따옴표나 홑따옴표로 둘러싸게 된다.

print "Hello World!"
print 'Hello World!'

# 위 두 문장은 똑같은 결과를 출력한다. 차이가 있는지?

print
print
# print 만 쓴 문장은 빈줄을 출력한다.

print "You're typing your first python program."
print 'He said "Good morning." and waved to me.'

# 위 두 문장은 무슨 차이가 있는지? 따옴표의 종류에 주목할 것

# using escape characters

print "That's The \"GREATEST\" program."

# another escape charaters
print
print
print "This line is printed in \n2 lines."
print "\tAnd this line is printed with indentation."
print "You can also print\n\t* a kind of\n\t* list\n\t* like this way."
print "\n\nIf you want to print 'back slash', use escape character : \\\\"

# 파이썬은 긴 문자열을 출력할 때 이렇게 쓸 수도 있음

print """You can print multi-line text, with triple double-quotes
like this. print 2, 3, 4 ,5 or more line as you type.
You can also using \\ escape character \\ in this representation.
and "Qouted Sentence using 'qoutes' is also available."."""

# 마지막으로 재밌는 표현하나더
print '.' * 20

위 코드를 정확히 타이핑했다면, 실행 후 다음과 같은 내용을 볼 수 있을 것이다.

Hello World!
Hello World!

You're typing your first python program.
He said "Good morning." and waved to me.
That is 'The "GREATEST" program.

This line is printed in
2 lines.
And this line is printed with indentation.
You can also print
    * a kind of
    * list
    * like this way.

If you want to print 'back slash', use escape character : \\
You can print multi-line text, with triple double-quotes
like this. print 2, 3, 4 ,5 or more line as you type.
You can also using \ escape character \ in this representation.
and "Qouted Sentence using 'qoutes' is also available.".
....................

1) # 문자로 시작하는 행은 주석(코멘트)이다. 주석은 프로그램 실행에 아무런 영향을 주지 않는다. 대신 나중에 작성된 코드를 다시 읽어볼 때 이 부분은 무엇을 하는 부분인지 쉽게 알아보기 위해 메모를 할 때 사용할 수 있고, 혹은 문제가 있는 코드를 무력화할 때 사용하기도 한다. 주석에 대한 내용은 뒤에서 다시 살펴보게 될 것이다.

2) 처음 2줄의 주석은 파이썬에서 특별한 장치이다. 1행은 파이썬이 설치된 경로를 알려주어 터미널에서 파이썬 코드가 바로 실행될 수 있도록 한다. (이 부분 역시 다음에 따로 설명하겠다.) 2행은 이 코드의 문자가 UTF-8로 인코딩된 문자라는 것을 나타낸다. 주석등에 영문자, 숫자 등이 아닌 한글이나 한자, 일본어 등이 들어갈 때 파이썬에게 알파벳 말고 다른 문자가 있다는 것을 알려준다고 보면 된다.

3) Hello World! 를 출력하는 각각의 print 명령문이 있다. 두 개는 결과적으로 동일한 출력을 하지만 따옴표를 겹따옴표(“)를 썼는지 홑따옴표(‘)를 썼는지 차이가 있다. 이 따옴표의 차이는 다시 아래에서 볼 수 있다.

4) print 문에 아무 것도 넣지 않는다면 그냥 빈 줄을 출력하게 된다.

5) 20~21 행 두 줄은 따옴표의 용도를 잘 설명해주고 있다. 문자열은 따옴표 안에 들어가게 되므로 만약 문자열 내에 겹따옴표가 있다면 홑따옴표를, 홑따옴표가 있다면 겹따옴표를 써서 문자열을 감싸야 한다. (열고 닫는 따옴표의 쌍을 제대로 맞추기 위해서이다.)

6) 만약, 문장 내에 겹따옴표와 홑따옴표를 같이 써야 한다면 어떻게 해야 할까? 만약 “That’s “The GREATEST” program.” 이라고 쓰면 따옴표는 괄호의 짝처럼 행동하므로 “That’s “The GREATEST” program.” 으로 두 개의 문자열 사이에 The GREATEST가 들어가서 오류가 나게 된다. 이렇게 파이썬에서 사용하는 문법과 관련된 문자들은 따로 특별한 처리를 하지 않으면 문자열 내에서는 사용할 수 없다. 따라서 따옴표를 문자열의 시작과 끝을 알리는 용도가 아니라 글자 그대로의 따옴표로 인식하게 하기 위해서 ‘이스케이프 문자’라는 것을 사용한다. 이는 문자 앞에 역슬래쉬(\ : 윈도 운영체제에서는 원화 표시로 표시됨)를 붙여서 사용한다. 즉 \” 이라고 쓰면 문자열을 닫는 따옴표가 아니라 문자열 내에서 따옴표 한 글자로 인식한다.

7) 32~35행은 이런 이스케이프 문자를 사용하는 몇 가지 예를 보여준다. 이스케이프 문자를 표시하는 역슬래쉬는 문장 내에서 쓰이면 마찬가지로 역슬래쉬 두개를 붙여 하나의 문자로 표시하면 된다. 이스케이프 문자는 그 외에 특수한 문자들을 대체하기도 한다. \n은 “New line”의 의미로 문자열 내에서 줄바꿈을 넣어준다. 그리고 \t는 “Tab”으로 탭 키를 눌러 들여쓰기를 한 효과를 보여준다.

8) 파이썬에서는 “여러 줄의 텍스트”를 하나의 문자열로 만드는 방법이 있다. 바로 겹 따옴표를 세번 연달아 쓴 것을 문자열의 앞,뒤에 붙여주는 것이다. 이렇게 만든 문자열은 우리가 타이핑한 그대로를 보여주기에 적합하다. 즉 여러 줄의 문장을 출력해야 하는 경우에는, 이 방법을 사용하면 print 문을 반복하지 않고 한 번에 많은 양의 텍스트를 출력할 수 있다. 물론 이 경우에도 이스케이프 문자를 사용하여 들여쓰기나 줄바꿈을 넣는 것이 가능하다.

특히 “”” ~ “”” 로 감싼 경우에는 문자열의 시작과 끝이 연속되는 따옴표 세 개 이기 때문에 겹따옴표나 홑따옴표를 이스케이프 문자로 처리하지 않고도 사용할 수 있게 된다.