#2. 파이썬 기본 2 - 문자열
- PIA team
- 2022년 1월 25일
- 6분 분량
최종 수정일: 2022년 1월 28일

#2-1. 문자열이란?
'문자열(String)' 이란, 문자나 단어, 숫자 등으로 이루어진 집합을 의미합니다.
예를 들어, 다음과 같은 것들이 있습니다.
"Pia"
"Pia space"
"20000"
세 개의 공통점이 무엇인지 찾으셨다면, 여러분은 벌써 Python의 세계에 적응하신 것입니다.
바로, 모두 따옴표(" ")에 둘러 싸여 있다는 것입니다.
즉, 따옴표로 둘러 싸여 있다면, 모두 문자열이라고 보시면 될 것입니다.
Python에서 문자열을 만드는 방법은 크게 네 가지가 있습니다.
① 큰 따옴표( " )를 문자열 양 끝에 사용합니다.
② 작은 따옴표( ' )를 문자열 양 끝에 사용합니다.
③ 큰 따옴표 3개를 연속으로 사용하여( """ ) 문자열 양 끝에 사용합니다.
줄바꿈까지 인식합니다.
④ 작은 따옴표 3개를 연속으로 사용하여 ( ''' ) 문자열 양 끝에 사용합니다.
줄바꿈까지 인식합니다.
#2-2. 문자열을 변수에 할당하기
문자열을 만들기 위해서는 큰 따옴표( " ) 또는 작은 따옴표( ' )를 통해 출력해야 합니다.
그런데, 문자열을 만드는 과정에서 상당히 많은 케이스가 생길 수 있기 때문에 그 케이스마다
문자열을 효과적으로 만들기 위해 크게 4가지의 경우로 나누어 문장을 출력하는 것입니다.
① 문자열에 작은 따옴표가 들어있는 경우
예문을 통해 생각해 본다면,
Joy's favorite fruit is watermelon
이 문장을 fruit 라는 변수에 할당하고 싶다고 해 봅시다.
이 때, 위 예문에는 작은 따옴표가 들어 있습니다.
이 경우에는, 아래와 같이 문장을 큰 따옴표로 둘러싸 주는 방법이 있습니다.
>>> fruit = "Joy's favorite fruit is watermelon"
이렇게 하면, 문장 안의 작은 따옴표는 문장을 나타내기 위한 기호로 인식되지 않을 것입니다.

출력을 해 보면, 정상적으로 잘 출력되는 것을 확인 할 수 있습니다.
② 문자열 안에 큰 따옴표가 들어있는 경우
예문으로 확인해 봅시다.
"I am pretty" Joy says.
이 문장을 pretty 라는 변수에 할당하고 싶습니다. 그런데, 예문에 큰 따옴표가 있습니다.
이러한 경우에는 문장 전체를 아래와 같이 작은 따옴표로 둘러싸 줍니다.
>>> pretty = '"I am pretty" Joy says.'
이렇게 하면, 문장 안의 큰 따옴표는 문장을 나타내기 위한 기호로 인식되지 않을 것입니다.

출력을 해 보면, 정상적으로 잘 출력되는 것을 확인 할 수 있습니다.
물론 다른 방법도 존재합니다.
예를 들어, 백슬래시( \ )를 사용하는 것이 있습니다. 백슬래시를 작은 따옴표나 큰 따옴표 앞에
사용하면, 뒤의 작은 따옴표나 큰 따옴표를 문자열을 만드는 기호로 반영하지 않습니다.
>>> fruit = 'Joy\'s favorite fruit is watermelon'
>>> pretty = "\"I am pretty.\" Joy says."
이처럼, 작은 따옴표나 큰 따옴표 앞에 백슬래시를 써 주는 것입니다.

출력을 해 보면, 정상적으로 잘 출력되는 것을 확인 할 수 있습니다.
③ 여러 줄 짜리 문자열을 할당하는 경우
문자열이 항상 한 줄이라는 법은 없습니다. 여러 줄 짜리 문자열을 할당해야 하는 경우가 생길 수도 있는데, 이런 경우 문자열 앞과 뒤에 작은 따옴표 연속 3개 혹은 큰 따옴표 연속 3개를
사용해 준다면, 에러 없이 코드를 출력할 수 있습니다.
예문으로 확인해 보겠습니다.
Joy is pretty
and she likes watermelon
이라는 문자열을 two_line 이라는 변수에 할당하고 싶습니다.
이때, 앞, 뒤에 작은 따옴표 3개를 연속으로 사용해 줍니다.(큰 따옴표 3개 연속 사용도 가능)
>>> two_line = '''
... Joy is pretty
... and she likes watermelon
... '''
이렇게 사용한다면,

문제 없이 두 줄 짜리 문자열을 출력한 것을 확인하실 수 있습니다.
여러 줄 짜리 문자열을 출력하는 또 다른 방법이 있습니다.
바로 이스케이프 코드(Escape code) 중 하나인 줄바꿈 문자 \n 을 사용하는 것입니다.
이스케이프 코드(Escape code)
프로그래밍을 할 때 사용할 수 있도록 미리 정의해 둔 "문자 조합"으로,
주로 출력물을 보기 좋게 정렬하는 용도로 사용합니다.
이를 활용해 다시 예문을 출력해 본다면,
>>> two_line = 'Joy is pretty\nand she likes watermelon'

위와 같이 문제 없이 출력된 것을 볼 수 있습니다.
그러나, \n 의 경우, 읽기에 불편하고 줄이 길어지는 단점이 있기 때문에,
큰 따옴표 3개 연속, 혹은 작은 따옴표 3개 연속을 사용하는 것이 효과적일 것입니다.
이처럼 예외적인 경우가 발생하거나, 프로그래밍을 하는 데에 있어 조금 더 효과적인 성능을
내기 위해서 4가지의 방법으로 문자열을 만드는 것이 일반적입니다.
④ 문자열 안에 따옴표가 2개 들어있는 경우
큰 따옴표 3개 혹은 작은 따옴표 3개를 연속으로 사용하는 경우가 더 있습니다.
바로 따옴표 속에 따옴표가 2개가 들어가는 경우입니다.
예문으로 확인해 봅시다.
"I'm happy." Joy said.
위와 같은 문자열을 python 이라는 변수에 할당해야 한다면 어떻게 해야 할까요?
두 가지의 방법이 있을 것입니다.
가 ) 작은 따옴표 3개를 연속으로 사용하는 경우입니다.
>>> python = '''"I'm happy." Joy said.'''
이렇게 문자열을 작성한다면,

문제없이 잘 출력될 것입니다.
나 ) 백슬래시를 사용하는 경우입니다.
>>> python = '"I\'m happy." Joy said.'
이렇게 문자열을 작성한다면,

역시 문제없이 출력 될 것입니다.
이처럼, 프로그래밍에는 정답이란 없습니다.
여기서 조금 더 나아가 본다면, 만약에
"I remember that he said "Joy's favorite fruit is watermelon"" Jane said.
조금 복잡하지만, 이러한 문장을 line 이라는 변수에 할당해야 한다면 어떻게 해야 할까요?
위에서 설명한 과정을 잘 이해하고 천천히 입력해보면, 어렵지 않습니다.
위에서 다루었던 백슬래시( \ )를 활용하는 것입니다.
>>> line = '"I remember that he said \"Joy\'s favorite fruit is watermelon.\"" ... Jane said.'
처음과 마지막 큰 따옴표의 경우에는 별도의 백슬래시가 필요 없을 것입니다.

이대로 출력을 한다면, 정상적으로 출력되는 것을 볼 수 있을 것입니다.
이처럼 이스케이프 코드와 큰 따옴표, 작은 따옴표, 백슬래시를 자유자재로 잘 활용하여
문자열을 만들 수 있습니다.
#2-3. 문자열 연산
Python에서는 문자열을 더하고, 곱할 수 있습니다. 문자를 더하고 곱한다는 것이 다소 어색할 수는 있으나, 다른 언어에서는 찾을 수 없는 Python만의 독특한 기능입니다. 여러분의 생각을 그대로 반영해 준다는 점에서 Python의 장점 중 하나라고 볼 수 있을 것입니다.
① 문자열 더하기
>>> one = "Joy"
>>> two = " is pretty!" # 공백을 넣어줘야 출력 문장에서 띄어쓰기가 가능합니다.
>>> print(one+two)
마지막에 print한 것처럼 변수 one 과 변수 two 를 + 로 연결해 준 뒤, 출력한다면

문제 없이 한 문장으로 출력된 것을 확인할 수 있습니다.
② 문자열 곱하기
더하기에서는 + 로 문자열을 더해 한 문장으로 만들었습니다. 곱하기는 비슷한 논리로 같은
내용을 두 번 반복할 때 사용합니다. 예를 들어 설명하겠습니다.
>>> girl = "Joy"
>>> print(girl*2)
차이점이 있다면, 더하기는 변수끼리 더했다면, 곱하기의 경우, 변수와 반복할 횟수(숫자)를
* 로 연결한다는 것입니다. 위 코드를 분석한다면, girl 이라는 변수를 2번 반복하여 출력하라는 의미입니다. 이대로 출력해 본다면,

아무 문제 없이 출력되는 것을 확인할 수 있습니다.
여기서 더 응용해 본다면, 프로그램을 만든 후,
다음과 같이 제목을 만들고 싶다면 어떻게 해야 할까요?
============== # 14개
Hello Everyone
============== # 14개
프로그램을 만든 후, 제일 위에 이렇게 제목을 둔다면 보기에 깔끔할 것입니다.
>>> print("="*14)
>>> print("Hello Everyone")
>>> print("="*14)
이렇게 입력하면 될 것입니다. 맨 윗줄과 맨 아랫줄에 ' = '를 14개 print해주고,
가운데 줄에 입력하고 싶은 문자열을 print해주면 될 것입니다.
* 여기서 주의할 점이 있습니다. *
코드를 입력할 때, 다음 두 가지의 차이점이 무엇일 지 생각해 볼까요?
네, 맞습니다.
1번에서 hello 는 '변수'입니다. 즉, 위에서 hello 라는 변수에 할당된 값을 print하게 될
것입니다. 물론 hello가 아니라 지정된 문자열인 " hi " 로 말이죠.
위에서 다룬 것처럼, " hello 라는 변수에 할당된 문자열을 print 해줘! " 라는 의미입니다.
2번은 변수를 print한 것이 아니라 문자열(string)을 print한 것입니다.
즉, " hello 라는 문자열을 print해줘! " 라는 의미가 될 것입니다.
③ 문자열 길이 구하기
문자열의 길이도 구할 수 있습니다. 문자열의 길이란, 공백을 포함한 글자 수라고
생각하시면 될 것 같습니다.
예를 들어, one 이라는 변수를 선언한다고 합시다.
>>> one = "hello everyone"
이 변수에 할당된 문자열은 "hello everyone"입니다. 이 문자열의 길이를 알고 싶습니다.
이때는, len 함수 를 사용하면 됩니다. print 함수와 같이 기본 내장 함수이기 때문에,
별도의 설정은 필요하지 않습니다. len함수를 사용해 보겠습니다.
>>> one = "hello everyone"
>>> print(len(one))
이렇게 len(변수명) 을 print해주면, 해당 문자열의 길이를 알려주게 됩니다.

공백을 포함한 문자열의 길이를 정상적으로 출력해 줍니다.
#2-4. 문자열 인덱싱(Indexing)
'인덱싱(indexing)'은 색인 이라는 뜻을 가진 영단어입니다. 이를 유념하여 생각해 봅시다.
>>> test = "Joy is pretty."
test 라는 변수를 선언합니다. 여기서 문자열의 각 문자마다(당연히 공백 포함입니다)
0부터 번호를 순서대로 매겨보면, J=0, o=1, y=2, 공백=3, i=4, ∙ ∙ ∙ 이렇게 될 것입니다.
인덱싱은 변수와 [ ] 기호를 결합하여 출력합니다. 괄호 안에는 내가 찾고 싶은, 색인하고
싶은 번째의 번호를 입력해 주면 됩니다.
예를 들어 보겠습니다.
내가 만약, 위의 test 변수의 9번째 문자를 찾고 싶다면, 이렇게 코드를 입력하면 됩니다.
>>> test = "Joy is pretty."
>>> print(test[9])

9번째 문자는 ' e '였습니다.
근데 여기서 한 가지 궁금한 것이 생기셨나요? 그렇다면 이제 python의 세계에 조금 흥미를
가지신 것입니다. 앞에서 문자의 번호를 매길 때, 왜 0 부터 매겼을까요?
바로 Python에서는 인덱스를 0부터 세기 때문입니다. 이 점을 유의하시면 될 것 같습니다.
여기서 한 발자국 더 나가 보겠습니다.
>>> test = "Joy is pretty."
>>> print(test[-2])
이렇게 코드를 입력하면 어떻게 출력될까요?

네, 맞습니다. 정답은 " y " 입니다. 음수를 사용한 경우 뒤에서부터 세 주시면 됩니다.
>>> test[-2]
이라는 말은 "test라는 변수에 할당된 문자열에서 뒤에서 2번째 문자를 알려줘"라는 뜻입니다.
당연히 0과 -0은 같은 수이기 때문에, 음수를 사용한 경우 맨 뒤는 -1 이 됩니다.
정리하자면, [ ] 사이에 0 또는 양수를 사용하면, 앞에서부터!
음수를 사용하면, 뒤에서부터 자리를 세 주시면 됩니다.
추가적으로, 하나의 문자만 뽑는 것이 아닌, 여러가지를 뽑을 수도 있습니다. 예를 들면,
>>> test = "Joy is pretty."
>>> print(test[0]+test[9]+test[10])
이렇게 print를 한다면, test 변수의 문자열에서 0번째(J), 9번째(e), 10번째(t) 자리의 문자를
모두 가져올 수 있습니다.

잘 출력되는 것을 확인할 수 있습니다.
#2-5. 문자열 슬라이싱(slicing)
'슬라이싱(slicing)'은 나누다 라는 뜻을 가진 영단어입니다. 이를 유념하여 생각해 봅시다.
#3-4 마지막에 다루었던 내용을 다시 확인해 봅시다. 하나의 문자를 뽑는 것이 아니라
여러가지의 문자를 가져와야 하는 상황이 벌어졌다면, 저렇게 하나하나 입력하는 것이
시간적으로 비효율적일 것입니다.
그런 경우에는 아래와 같이 [시작번호:끝번호] 형태로 해결할 수 있습니다.
>>> test = "Joy is pretty"
>>> print(test[0:4])
위 코드에서 [0:4] 는 0번째 문자부터, 4번째 문자 전까지의 문자를 알려달라는 의미입니다.
즉, 4번째 문자는 포함하지 않는 개념입니다. 이 점 유의하시면 될 것 같습니다.
수식으로 나타낸다면
>>> test[0:4] = test[0]+test[1]+test[2]+test[3]
이 될 것입니다.
이처럼 문자열의 구간을 잘라서 가져오는 개념을 슬라이싱 기법 이라고 합니다.
몇 가지 특징을 알려드리겠습니다.
① 시작번호가 0일 필요는 없습니다.
>>> test[5:13]
② 끝 번호를 생략하면, 시작 번호부터 해당 문자열의 끝까지 가져옵니다.
>>> test[10:]
③ 시작 번호를 생략하면, 해당 문자열의 처음부터 끝 번호 직전까지 가져옵니다.
>>> test[:7]
④ 시작, 끝 번호를 모두 생략하면, 해당 문자열의 처음부터 끝까지 모두 가져옵니다.
>>> test[:]
⑤ 인덱싱과 마찬가지로 음수를 사용할 수 있으며, 이 때에도 뒤에서 부터 세면 됩니다.
>>> test[1:-1]
예시를 가지고 문자열을 몇 개의 부분으로 나누어 보겠습니다.
>>> example = '20001008sunnyLucas'
Year: 2000
Month: 10
Day: 08
Weather:sunny
Name: Lucas
이 문장에서 '20001008sunnyLucas' 문자열을 코드 아래처럼 5개의 부분으로 쪼개 보겠습니다.
추가적인 정보를 드리자면,
print 함수를 사용하고 괄호 안에 , 로 연결을 해주면, 모두 함께 print 됩니다.
print("hello", "Python")
을 출력하면 hello, Python 이 출력될 것입니다.
다시 본론으로 돌아가서 슬라이싱을 이용하여 example 변수의 문자열을 쪼개보겠습니다.
>>> example = '20001008sunnyLucas'
>>> print("Year:", example[:4])
>>> print("Month:", example[4:6])
>>> print("Day:", example[6:8])
>>> print("Weather:", example[8:13])
>>> print("Name:", example[13:])
이렇게 print를 총 5개 입력해 주시면, 잘 출력이 될 것입니다.

한 번 더 응용해 보겠습니다.
만약, 문자열 ' tiher '을 ' tiger '으로 바꾸고 싶다면, 어떻게 해야 할까요?
>>> animal = "tiher"
>>> animal[2]
'h'
>>> animal[2]= "g"
단순하게 tiher의 2번째 문자를 g로 바꿔주면 될까요?
아닙니다. 이렇게 코드를 입력할 경우, 에러가 발생하게 될 것입니다.
왜냐하면, 문자열의 요소값은 바꿀 수 없는 값입니다.
그렇다면, 어떻게 해야 하는 지 알아보겠습니다. 슬라이싱 기법으로 해결할 수 있습니다.
>>> animal = "tiher"
>>> print(animal[:2]+"g"+animal[3:])
'tiher'의 0번, 1번을 잘라내고 (' ti ') , 문자열"g"를 더해준 다음, 3번부터 끝까지 붙여줍니다.

" tiger "로 잘 변경되어 출력된 것을 확인할 수 있습니다.
이렇듯 문자열의 인덱싱과 슬라이싱을 이용하여 여러가지 응용을 할 수 있을 것입니다.
댓글