앞 페이지에서는 숫자를 처리하는 파이썬 프로그램을 살펴보았습니다.
컴퓨터에게는 숫자가 중요하지만 인간은 주로 문자열(string)을 사용하여 정보를 표현하고 저장하므로 문자열 처리도 무척 중요합니다.
예를 들어 이메일 주소 "seulgi@redvelvet.smtown" 에서 '@' 문자를 중심으로 아이디와 도메인을 분리하는 문제입니다.
문자열(string)은 문자들의 순서 있는 집합(sequence of characters)이고 이것을 텍스트 데이터라고 부릅니다.
프로그래머들만 텍스트 데이터를 문자열(string)이라고 부릅니다. 문자열을 일렬로 나열된 문자들을 의미합니다.
예를 들어 "Hello"도 문자들이 모인 것으로 문자열입니다.
우리가 일상적으로 사용하는 단어, 문장들도 프로그램에서는 문자열이 됩니다.
파이썬에서는 큰따옴표("...")로 텍스트를 감싸면 문자열이 됩니다. 즉 다음과 같이 문자열을 생성할 수 있습니다.
아래의 코드를 대화형 Python에서 입력하여 보세요.
>>> "Hello"
<실행 결과>

문자열은 변수에 저장될 수 있습니다. 변수에 저장된 문자열을 print() 함수를 이용하여 출력할 수 있습니다.
대화형 Python에서는 변수 이름만 입력하고 엔터키를 누르면 됩니다.
greeting = "Merry Christmas!"
# 대화형 파이썬에서는 print(greeting)를 greeting만 써도 됩니다!
print(greeting)
<실행 결과>
Merry Christmas!
작은따옴표(' ')를 사용하여도 문자열을 만들 수 있습니다.
greeting = 'Merry Christmas!'
print(greeting)
<실행 결과>
Merry Christmas!
하지만 문자열을 큰따옴표(")로 시작했다가 작은따옴표(')로 끝내면 문법 오류가 발생합니다.
seulgi = "Red Velvet!'
print(seulgi)
<실행 결과>
SyntaxError: EOL while scanning string literal
또한 따옴표로 시작했는데 단어의 끝에 따옴표가 없어도 문법적인 오류가 됩니다.
greeting = "Happy Holiday
print(greeting)
<실행 결과>
SyntaxError: EOL while scanning string literal
문법이라는 것은 컴퓨터에서는 프로그램의 문장을 바르게 구성하기 위한 규칙을 의미합니다.
만약 우리가 영어 문장을 작성하는데 다음과 같이 주어와 동사의 수식를 일치시키지 않는다면 문법적인 오류가 생길 것입니다.
이처럼 프로그래밍 언어에서도 문장을 작성하는데 지켜야 할 규칙이 있습니다.
파이썬에서 문법 오류가 발생하면
SyntaxError: EOL while scanning string literal
라는 경고 메시지가 표시됩니다. EOL이란 "End Of Line"의 약자이며 줄의 끝을 만났다는 의미입니다.
큰따옴표가 혹은 작은따옴표 등의 문자가 마지막에 있을 것으로 기대하였는데 줄의 끝을 만날 때까지 발견하지 못했다는 의미가 됩니다.
그런데 왜 파이썬에서는 문자열을 나타내는데 큰따옴표와 작은따옴표를 동시에 사용할까요? 그것은 문자열 안에 따옴표가 들어가는 경우를 처리하기 위해서입니다.
예를 들어 '슬기가 "안녕" 이라고 말했습니다.' 라는 문장을 보면 큰따옴표 문장 안에 "안녕" 이라는 문자열이 포함되어 컴파일러가 오류를 출력합니다.
message = "슬기가 "안녕"이라고 말했습니다."
print(message)
<실행 결과>
SyntaxError: invalid syntax
따라서 이때는 "안녕" 대신 '안녕' 형태의 문자열을 넣어줘야 합니다.
message = "슬기가 '안녕'이라고 말했습니다."
print(message)
<실행 결과>
슬기가 '안녕'이라고 말했습니다.
지금까지는 한 줄로 된 문자열을 살펴보았습니다. 그러나 상황에 따라서는 문자열은 여러 줄에 걸칠 수 있습니다.
파이썬에서 여러 줄로 이루어진 문자열도 입력이 가능한데 3개의 큰따옴표를 """ ... """ 와 같이 사용하고 각 줄의 끝에 ENTER 키를 입력하면 됩니다.
3개의 작은따옴표 ''' ... ''' 를 사용해도 됩니다.
greeting = '''레드벨벳은
2014년 8월 1일에 데뷔했으며
올해는 데뷔 4년차입니다
데헷 ㅎ
'''
print(greeting)
<실행 결과>
레드벨벳은
2014년 8월 1일에 데뷔했으며
올해는 데뷔 4년차입니다
데헷 ㅎ
파이썬에서 따옴표를 출력할 때 \(₩) 문자를 사용할 수 있습니다. 문자 앞에 \가 붙으면 문자의 특수한 의미를 잃어버립니다.
따옴표 앞에 붙이면 문자열을 나타내는 따옴표의 특수한 의미를 잃어버리고 하나의 문자가 됩니다.
message = 'doesn\'t' # \를 사용하여 작은따옴표를 출력합니다.
print(message)
message = "\"Yes,\" he said." # \를 사용하여 큰따옴표를 출력합니다.
print(message)
<실행 결과>
doesn't
"Yes," he said.
\n 은 줄바꿈 문자를 나타내는 특수한 문자입니다. 문자열의 중간에 \n이 있으면 사용자가 ENTER 키를 누른 것과 마찬가지로 해석됩니다.
s = '첫 번째 줄\n두 번째 줄'
print(s)
<실행 결과>
첫 번째 줄
두 번째 줄
만약 print() 함수 사용 시에 \ 문자가 앞에 붙은 문자를 특수 문자로 취급하고 싶지 않고 싶을 수 있습니다.
이럴 경우엔 첫 번째 따옴표 앞에 r을 추가하여 특수 문자의 의미를 없앨 수 있습니다.
print('Before : C:\redvelvet\name\seulgi') # 여기서 \r은 커서를 맨 앞으로 옮기기, \n은 줄바꿈으로 잘못 해석합니다.
print(r'After : C:\redvelvet\name\seulgi') # 문자열 앞에 \r을 붙이면 문자열 안의 특수 문자는 특수한 기능으로 해석하지 않습니다.
<실행 결과>
edvelvet C:
ame\seulgi
After : C:\redvelvet\name\seulgi
문자열의 길이는 len() 함수를 사용하면 알 수 있습니다. 예를 들어 "Seulgi"의 길이는 6입니다.
print(len("Seulgi"))
<실행 결과>
6
공백 문자열(empty string)은 " " 이나 ' ' 을 사용하여 만들 수 있습니다.
리터럴(literal)은 프로그래밍 언어에서 직접적으로 입력된 값을 나타내는 용어입니다.
예를 들어 우리가 프로그램 소스에 16 이라고 입력하면 16은 정수 리터럴이 됩니다. 또 "Hello World!" 도 문자열 리터럴이 됩니다.
이스케이프 문자란 일반 문자가 아닌 시스템을 제어하기 위한 특수문자입니다. 파이썬에서 사용되는 이스케이프 문자는 아래와 같습니다.
| 이스케이프 문자 | 출력되는 문자 |
|---|---|
| \\ | 백슬래시 (\) |
| \' | 작은따옴표 (') |
| \" | 큰따옴표 (") |
| \n | 줄바꿈 문자 |
| \t | 탭 문자 |
파이썬에서는 2개 이상의 문자열 리터럴(즉 따옴표로 감싸진 문자열)이 서로 붙어 있으면 자동으로 연결됩니다. 이것은 리터럴에만 해당됩니다.
print('redvelvet' 'seulgi' "데헷")
<실행 결과>
redvelvetseulgi데헷
이 특징은 특히 긴 문자열을 분리하여 입력할 때 유용하게 사용할 수 있습니다.
lyrics = ('커지는 헐빗빗빗 빨라지는데\n'
'너답잖게 헐빗빗빗빗 거려 나를 볼 때')
print(lyrics)
<실행 결과>
커지는 헐빗빗빗 빨라지는데
너답잖게 헐빗빗빗빗 거려 나를 볼 때
변수나 수식은 해당하지 않습니다. 만약 변수와 변수, 또는 변수와 리터럴을 연결하고 싶으면 + 연산자로 합칠 수 있습니다.
예를 들어 아래와 같은 문장이 사용 가능한데 이것을 문자열 접합(string concatenation) 이라고 합니다.
print('Harry ' + 'Porter')
<실행 결과>
Harry Porter
변수에 저장된 문자열도 + 연산자로 합칠 수 있습니다.
first_name = "슬기"
last_name = "강"
name = last_name + first_name
print(name)
<실행 결과>
강슬기
+ 연산자는 2개의 문자열을 합치거나 2개의 정수를 합칠 수 있지만 만약 다음과 같이 문자열과 정수를 합치라고 하면 오류가 발생합니다.
print("Red Velvet" + 2014)
<실행 결과>
TypeError: must be str, not int
파이썬에서 모든 것에는 타입(type)이 있습니다. 자료형이라고도 하는데 여기서 "Red Velvet"은 문자열 타입이고 2014는 정수 타입입니다.
타입이 다른 데이터를 + 로 합치려고 시도하면 오류가 발생하기 때문에 2014는 함수 str() 을 이용하여 문자열로 변환한 후에 합쳐야 합니다.
print("Red Velvet" + str(2014))
<실행 결과>
Red Velvet2014
반대로 문자열을 숫자로 변환하는 함수도 있습니다. 예를 들어 정수 123을 문자열로 변환하려면 str(123)을 하면 됩니다.
문자열을 부동소수점으로 변환하려면 float() 함수를 사용합니다.
price = int("2014")
pi = float("3.141592")
int() 함수에 전달하는 문자열은 숫자만을 포함해야 하는데 float() 함수에 전달하는 문자열은 소수점도 포함할 수 있습니다.
하지만 변환이 불가능한 문자가 포함되어 있으면 오류가 발생합니다.
height = float("180.54cm")
print(height)
<실행 결과>
ValueError: could not convert string to float: '180.54cm'
자료형(data type)은 프로그래밍 언어에서 정수값, 실수값 등의 여러 종류 데이터를 식별하는 분류로서 데이터 타입 또는 타입이라고도 합니다.
파이썬은 변수를 생성할 때 자료형을 적지 않지만 C, Java와 같은 다른 언어에서는 변수를 생성할 때 변수의 자료형을 반드시 명시하여야 합니다.
파이썬에서 특이한 점은 동일한 문자열을 반복시켜 새로운 문자열을 생성할 수 있다는 점입니다.
예를 들어 "="를 반복하여 "==================================================" 와 같은 줄을 손쉽게 만들 수 있습니다.
line = "=" * 50
print(line)
<실행 결과>
==================================================
어떠한 문자열도 * 연산자를 이용하여 반복시킬 수 있습니다. 예를 들어 "Seulgi"를 10번 되풀이 하려면 아래와 같이 하면 됩니다.
message = "Seulgi"
print(message * 10)
<실행 결과>
SeulgiSeulgiSeulgiSeulgiSeulgiSeulgiSeulgiSeulgiSeulgiSeulgi
문자열에 변수의 값을 삽입하여 출력하고자 한다면 %s 를 이용합니다.
예를 들어 레드벨벳의 데뷔년도를 변수에 저장한 후 "레드벨벳은 2014년에 데뷔하였습니다."와 같이 출력한다고 합시다.
age = 25
print("슬기의 나이는 %s살 입니다." % age)
<실행 결과>
슬기의 나이는 25살 입니다.
25를 가지는 변수 age가 생성되었고 print() 함수에서는 나이가 들어갈 부분이 %s로 표시되었습니다.
%s 자리에 age의 값을 출력하라고 알려주는 것입니다.
물론 처음부터 "슬기의 나이는 25살 입니다." 라고 출력해도 되지만 나이는 매년 바뀌므로 변할 수 있는 값이기 때문에 변수를 사용하는 것이 좋습니다.
아래의 예제는 두 개의 문자열 변수와 %s를 이용한 출력 예제입니다.
message = "레드벨벳의 데뷔년도는 %s입니다."
year = "2014년"
print(message % year)
<실행 결과>
message = "레드벨벳의 데뷔년도는 %s입니다."
year = "2014년"
print(message % year)
문자열 안에서 하나 이상의 %s를 사용할 수도 있는데 이때는 값들을 괄호로 묶어 % 뒤에 써주어야 합니다.
message = "레드벨벳의 데뷔 날짜는 %s년 %s월 %s일입니다."
print(message % (2014, 8, 1))
<출력 결과>
레드벨벳의 데뷔 날짜는 2014년 8월 1일입니다.
문자열 중에서 하나의 문자를 추출하려면 어떻게 해야 할까요? 인덱싱(Indexing)이란 문자열에 [ 와 ] 를 붙여 문자를 추출하는 것입니다.
[ 와 ] 사이에는 인덱스라는 숫자가 들어가는데 인덱스(index)는 문자열에 포함된 각각의 문자에 매겨진 번호입니다.
예를 들어 문자열 "Monty Python"에서 각 문자의 인덱스는 다음과 같습니다.

첫 번째 문자의 인덱스는 0이며 두 번째는 1, 세 번째는 2가 됩니다.
인덱스에서 혼동하기 쉬운 부분은 0부터 시작한다는 것입니다. 1부터 시작하는 것이 아닙니다.
또한 인덱스는 음수가 될 수 있습니다.
파이썬만의 특별한 기능인데 위의 그림 아래처럼 인덱스가 음수가 되면 오른쪽에서 왼쪽으로 번호가 매겨집니다.
word = "Monty Python"
print(word[0])
print(word[4])
print(word[-1])
print(word[-6])
<실행 결과>
M
y
n
P
-0은 0과 동일하기 때문에 음수 인덱스는 -1부터 시작합니다. 인덱싱에서 너무 큰 인덱스를 사용하면 오류가 발생합니다.
word = "Monty Python"
print(word[42])
<실행 결과>
IndexError: string index out of range
파이썬에서 한번 작성된 문자열은 변경이 불가능합니다. 따라서 문자열의 일부 글자를 바꾸려고 하면 오류가 발생합니다.
word = "Monty Python"
word[0] = "W"
print(word)
<실행 결과>
TypeError: 'str' object does not support item assignment
쿠러그는 비밀리에 경희대학교의 암호 문제를 푸는 비밀 조직이 존재합니다.
이 비밀 조직은 앞 글자를 따 줄임말을 사용하는 것을 좋아하는데 이 비밀 조직이 사용하는 프로그램을 만들어 봅시다.
우리가 만들 프로그램은 사용자로부터 단어 3개를 입력 받아 약자(acronym : 몇 개 단어의 머리글자로 된 말)를 만드는 프로그램입니다.
예를 들어 'OST'는 Original Sound Track, 'LoL'은 League of Legends의 약자입니다. 아래의 실행 결과가 나오도록 프로그램을 작성해봅시다.
<실행 결과>
첫 번째 단어를 입력해주세요 : Kang
두 번째 단어를 입력해주세요 : Seul
세 번째 단어를 입력해주세요 : Gi
KSG