9.1 문자열 사용하기

Unit 9. 문자열 사용하기

'Unit 3 Hello, world!로 시작하기'에서 문자열을 출력해본 것 기억나시죠? 문자열에는 생각보다 다양한 기능이 숨어 있습니다. 이번에는 문자열에 대해 좀 더 자세히 알아보겠습니다.

먼저 간단하게 파이썬 프롬프트에서 문자열 'Hello, world!'를 출력해보겠습니다.

>>> hello = 'Hello, world!'
>>> hello
'Hello, world!'

Hello, world!' '(작은따옴표)로 묶어서 문자열로 만들었습니다. 문자열은 영문 문자열뿐만 아니라 한글 문자열도 사용할 수 있습니다.

>>> hello = '안녕하세요'
>>> hello
'안녕하세요'

특히 파이썬에서는 작은따옴표로 묶는 방법 이외에도 문자열을 만드는 여러 가지 방법이 있습니다. 먼저 " "(큰따옴표)로 묶는 방법입니다.

>>> hello = "Hello, world!"
>>> hello
'Hello, world!'

그리고 '''(작은따옴표 3개)로 묶거나 """(큰따옴표 3개)로 묶을 수도 있습니다.

>>> hello = '''Hello, Python!'''
>>> hello
'Hello, Python!'
>>> python = """Python Programming"""
>>> python
'Python Programming'

9.1.1 여러 줄로 된 문자열 사용하기

이번에는 여러 줄로 된 문자열(multiline string)을 사용해보겠습니다. 다음과 같이 '''(작은따옴표 3개)로 시작하고 Hello, world!를 입력한 다음에 엔터 키를 누르면 다음 줄로 이동합니다. 이런 방식으로 문자열을 계속 입력하고 마지막 줄에서 '''로 닫은 뒤 엔터 키를 누르면 >>> 프롬프트로 돌아옵니다.

>>> hello = '''Hello, world!
안녕하세요.
Python입니다.'''
>>> print(hello)
Hello, world!
안녕하세요.
Python입니다.

print 함수로 hello의 내용을 출력해보면 입력한 문자열 3줄이 출력됩니다. 사실 파이썬 셸에서는 여러 줄로 된 문자열을 사용할 일이 많지 않습니다. 여러 줄로 된 문자열은 주로 .py 스크립트 파일에서 사용합니다.

이처럼 여러 줄로 된 문자열은 '''(작은따옴표 3개)로 시작하여 '''로 끝납니다. 물론 """(큰따옴표 3개)로 시작하여 """로 끝내도 됩니다.

그런데 문자열을 표현할 때 작은따옴표와 큰따옴표 중 한 가지로 통일하지 않고 여러 가지 방식을 사용할까요? 왜 그런지 알아봅시다.

9.1.2 문자열 안에 작은따옴표나 큰따옴표 포함하기

문자열을 사용하다 보면 문자열 안에 작은따옴표나 큰따옴표를 넣어야 할 경우가 생깁니다. 이때는 작은따옴표와 큰따옴표를 사용하는 규칙이 달라집니다.

먼저 문자열 안에 '(작은따옴표)를 넣고 싶다면 문자열을 "(큰따옴표)로 묶어줍니다. 이렇게 하면 문자열 안에 '를 그대로 사용할 수 있습니다.

>>> s = "Python isn't difficult"
>>> s
"Python isn't difficult"

반대로 문자열 안에 "(큰따옴표)를 넣고 싶다면 문자열을 '(작은따옴표)로 묶어줍니다.

>>> s = 'He said "Python is easy"'
>>> s
'He said "Python is easy"'

하지만 작은따옴표 안에 작은따옴표를 넣거나 큰따옴표 안에 큰따옴표를 넣을 수는 없습니다.

>>> s = 'Python isn't difficult'
SyntaxError: invalid syntax
>>> s = "He said "Python is easy""
SyntaxError: invalid syntax

실행을 해보면 구문 에러(SyntaxError)가 발생합니다.

하지만 여러 줄로 된 문자열은 작은따옴표 안에 작은따옴표와 큰따옴표를 둘 다 넣을 수 있습니다. 또한, 큰따옴표 안에도 작은따옴표와 큰따옴표를 넣을 수 있습니다. 이번에는 스크립트 파일로 만들고 실행해봅니다.

string_multiline_quote.py

single_quote = '''"안녕하세요."
'파이썬'입니다.'''
 
double_quote1 = """"Hello"
'Python'"""
 
double_quote2 = """Hello, 'Python'"""    # 한 줄로 작성
 
print(single_quote)
print(double_quote1)
print(double_quote2)

실행 결과

"안녕하세요."
'파이썬'입니다.
"Hello"
'Python'
Hello, 'Python'

지금까지 문자열의 다양한 사용 방법을 알아보았습니다. 문자열은 '(작은따옴표)로 묶어도 되고 되고 "(큰따옴표)로 묶어도 된다는 점과 여러 줄로 된 문자열은 '''(작은따옴표 3개) 또는 """(큰따옴표 3개)를 사용한다는 점만 기억하면 됩니다. 문자열 안에 작은따옴표나 큰따옴표를 넣는 방법은 가끔 사용하므로 필요할 때 다시 돌아와서 찾아보면 됩니다.

참고 | 문자열에 따옴표를 포함하는 다른 방법

작은따옴표 안에 작은따옴표를 넣을 수는 없을까요? 방법이 있습니다. 다음과 같이 작은따옴표 앞에 \(역슬래시)를 붙이면 됩니다.

>>> 'Python isn\'t difficult'
"Python isn't difficult"

물론 큰따옴표도 "He said \"Python is easy\""처럼 큰따옴표 앞에 \를 붙이면 됩니다.

이처럼 문자열 안에 ', " 등의 특수 문자를 포함하기 위해 앞에 \를 붙이는 방법을 이스케이프(escape)라고 부릅니다. 자세한 내용은 '부록 47.6 이스케이프 시퀀스'를 참조하세요.

참고 | 따옴표 세 개로 묶지 않고 여러 줄로 된 문자열 사용하기

문자열 안에 개행 문자(\n)을 넣으면 따옴표 세 개로 묶지 않아도 여러 줄로 된 문자열을 사용할 수 있습니다.

>>> print('Hello\nPython')
Hello
Python

사실 따옴표 세 개로 묶어서 여러 줄로 된 문자열을 만들면 줄바꿈이 되는 부분에 \n이 들어있습니다. print 없이 출력해보면 \n이 그대로 나옵니다.

>>> '''Hello
Python'''
'Hello\nPython'
참고 | 한글 문자열 출력이 안 될 때

파이썬 스크립트 파일에 한글 문자열을 넣었을 때 에러가 나는 경우가 있습니다.

C:\project>python string_multiline_quote.py
  File "string_multiline_quote.py", line 1
SyntaxError: Non-UTF-8 code starting with '\xbe' in file string_multiline_quote.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

에러가 나는 이유는 .py 파일을 UTF-8이 아닌 CP949로 저장했기 때문입니다. 이때는 스크립트 파일을 UTF-8로 저장하면 됩니다. 보통 메모장을 사용하면 기본 인코딩이 CP949라서 이런 문제가 종종 생깁니다. 메모장에서 UTF-8로 저장하려면 파일(F) > 다른 이름으로 저장(A)… > 인코딩(E)에서 UTF-8을 선택한 뒤 저장하면 됩니다. 인코딩 문제를 예방하려면 파이썬 IDLE, PyCharm 등 파이썬 전용 편집기나 개발 도구를 사용하면 됩니다. 이들 편집기, 개발 도구는 기본 인코딩이 UTF-8입니다.

참고 | 파이썬 셸과 스크립트 파일의 결과가 다른데요?

파이썬 셸의 >>>에서 문자열을 그대로 출력하면 작은따옴표도 함께 출력됩니다(변수에 넣은 뒤 변수로 출력해도 마찬가지).

>>> 'Hello, world!'
'Hello, world!'

파이썬 셸에서는 문자열이나 변수를 그대로 입력하면 출력 결과가 문자열이라는 것을 정확하게 표현하기 위해 작은따옴표로 묶인 문자열이 출력됩니다.

스크립트 파일에서는 문자열이나 변수만으로 출력을 할 수 없으므로 print를 사용합니다.

hello.py

print('Hello, world!')

실행 결과

Hello, world!

이렇게 스크립트 파일에서 print로 문자열을 출력해보면 작은따옴표 없이 문자열만 출력됩니다. 스크립트 파일뿐만 아니라 파이썬 셸에서도 print를 사용하면 작은따옴표 없이 출력됩니다.

>>> print('Hello, world!')
Hello, world!