본문 바로가기
→ 지식나눔/Python 기초 강좌

4. Python 기초 문법 - 문자열

by DigitalJobs 2021. 12. 27.

4. Python 기초 문법 - 문자열

 

1. 문자열(String)

이번에 알아볼 자료형은 문자열(String)이며, 문자열은 문자들의 모임, 문자를 나열한 것을 문자열이라고 합니다. 'a', 'b', 'c' 등과 같은 건 문자라고 할 수 있지만 "apple", " boy", "computer"와 같이 문자들이 모이게 되면 이것을 문자열이라고 할 수 있습니다. 파이썬에서 문자열은 단일 인용부호(')이중 인용부호(")로 감싸주어 표현합니다. 주의하실 점은, 감싸줄 때는 단일 인용부호로 시작했으면 단일 인용부호로 끝나야 하며, 이중 인용부호로 시작했으면 이중 인용부호로 끝나야만 한다는 것을 기억하시기 바랍니다. 아래의 예는 모두 문자열이라고 할 수 있습니다.

 

1  
2
3
4
5
6
>>> type("ABCDEFGHI")
<class 'str'>
>>> type('ABC')
<class 'str'>
>>> type("1301##")
<class 'str'>

 

그리고 파이썬에서는 위 방법뿐만 아니라 두가지 방법이 더 존재하는데, 이는 단일 인용부호나 이중 인용부호를 연속으로 세 번 연속으로 쓴 """와 '''가 있습니다. 이런 연속된 인용부호를 쓰게 되면 간단하게 여러 줄의 문자열을 변수에 대입하거나 출력할 수 있습니다. 아래의 예제를 한번 보도록 합시다.

 

1  
2
3
4
5
6
7
8
9
>>> print("""
ABCDEFGHIJKL
0123456789
!@#$%^&*
""")
  
ABCDEFGHIJKL
0123456789
!@#$%^&*

위 예제를 보시면 연속된 인용부호의 사용은 여러 줄의 문자열을 보다 쉽게 출력하는 것을 가능하게 합니다. 단일 혹은 이중 인용부호의 사용으로 여러 줄의 문자열을 나타내게 하려면 이스케이프 문자를 사용하여야만 합니다.

 

여기서 이스케이프 문자란 별도의 기능을 제공하는 특수한 문자로 앞에 역슬래시(\)가 있습니다. 아래의 표는 주로 쓰이는 이스케이프 문자를 정리해둔 것입니다.

이스케이프 문자 설명
\n 개행(Newline, 줄바꿈)
\t 탭(Tab)
\0 NULL 문자
\\ 문자 '\'
\' 단일 인용부호(')
\" 이중 인용부호(")

위 표에 정리된 이스케이프 문자를 한번 사용하여 보도록 합시다. 아래 예제에서는 개행 문자와 탭 문자를 사용했습니다.

1  
2
3
>>> print("AAA\nB\tCDE")
AAA
B   CDE

결과를 보시면 AAA 바로 다음에 개행이 되고, B 다음에 탭 문자가 삽입된 것을 보실 수 있습니다. 만약에 역슬래시를 출력하려면, 위 표에 나온대로 역슬래시를 연속으로 두 번을 써야 하는데 이는 역슬래시가 단독으로 쓰이면 이스케이프 문자로 인식하기 때문에, 아래와 같이 역슬래시를 두 번 사용함으로 하나의 역슬래시를 출력할 수 있습니다.

 

1  
2
>>> print("C:\\ABC.txt")
C:\ABC.txt

 

그리고 이중 인용부호(")나 단일 인용부호(')로 묶은 문자열 안에 "나 '를 포함하고 싶은 경우에는 앞에다 역슬래시(\)를 붙이거나, 이중 인용부호로 묶은 문자열 내에서 단일 인용부호를 사용하거나, 단일 인용부호로 묶은 문자열 내에서 이중 인용부호를 사용하면 됩니다. 아래와 같이 말입니다.

1
2
3
4
5
6
7
8
>>> print("\"It's all prepared. All I need to is move forward!\"")
"It's all prepared. All I need to is move forward!"
>>> print('"Try your best rather than be the best."')
"Try your best rather than be the best."
>>> print("'I determine my future all by myself.'")
'I determine my future all by myself.'
>>> print('\'Think different!\'')
'Think different!'
 

2. 문자열 연산(String operation)

파이썬에서는 문자열에 관련된 연산자들도 지원하고 있는데, 이 중에서 + 연산자는 문자열을 서로 연결하는 기능을 하며, * 연산자는 문자열을 반복하는 기능을 합니다. 

1  
2
3
4
5
6
>>> "012" "3456789"
'0123456789'
>>> "ABC" + "DEFGHI"
'ABCDEFGHI'
>>> "Python!" * 3
'Python!Python!Python!'

 

위 예제의 첫줄에 적힌 코드에서는 + 연산자가 없어도 문자열이 서로 연결된 것을 보실 수 있습니다. 이는 값이 고정되어 있는 문자열 상수끼리는 + 연산자를 생략할 수 있기 때문입니다. 그리고 세 번째 줄에 쓰인 + 연산자는 "ABC"와 "DEFGHI"를 서로 연결하여 "ABCDEFGHI"를 만들어 냅니다. 다섯 번째 줄에 쓰인 * 연산자는 "Python!"을 3번 반복하는 기능을 하여 "Python!Python!Python!"를 만들어 내는 것입니다.

 

3. 인덱싱(Indexing)

파이썬에서는 문자열에서 원하는 위치에 있는 문자를 마음대로 꺼낼 수 있는데 이를 인덱싱(Indexing)이라 합니다. 변수 뒤에 가져오려는 문자의 위치를 적고, 그 위치를 대괄호로 감싸면 되며, 즉 '변수[위치]'와 같은 형태입니다. 대괄호 안에 들어가는 수를 위치, 첨자, 인덱스라고도 하며 이 위치는 1이 아닌 0부터 시작합니다. 예를 들어서 "python is very powerful"와 같은 문자열이 있다면, 각 문자의 위치는 아래 그림과 같습니다.

위 그림에서 예를 들어, 위치 4에 해당하는 문자는 'o', 위치 11에 해당하는 문자는 'e'입니다. 이를 직접 인덱 싱하여 예상하던 결과가 맞는지 비교해보도록 합시다. 아래의 예제를 우선 봅시다.


 

1  
2
3
4
5
6
7
8
9
>>> var = "python is very powerful"
>>> var[4]
'o'
>>> var[11]
'e'
>>> var[0]
'p'
>>> var[1]
'y'

 

위 코드의 결과를 보시니 우리가 생각하던 결과와 일치하죠? 그럼 위치에 음수가 들어가는 경우는 어떤 결과가 나올 것 같나요? 위치에 음수가 쓰이면 앞에서부터가 아닌 뒤에서부터 문자열을 읽게 됩니다. 

 

위 그림에서 예를 들면, 위치 -2에 해당하는 문자는 'u', 위치 -10에 해당하는 문자는 'y', 위치 -16에 해당하는 문자는 'i'일 것입니다. 이를 직접 인덱 싱하여 예상하던 결과가 맞는지 비교해보도록 합시다. 아래의 예제를 봅시다.

 

1  
2
3
4
5
6
7
>>> var = "python is very powerful"
>>> var[-2]
'u'
>>> var[-10]
'y'
>>> var[-16]
'i'

 

위 코드의 결과와 예상했던 결과가 일치함을 알 수 있습니다. 주의하실 점은 아래와 같이 인덱싱을 통해 문자열의 일부를 수정하려고 하면 에러가 발생합니다. 인덱싱을 통해서 문자열을 변경하는 행위는 허용되지 않는다는 의미입니다.

1  
2
3
4
5
6
>>> var = "ABCDE"
>>> var[2] = 'G'
Traceback (most recent call last):
  File "<pyshell#66>", line 1, in <module>
    var[2] = 'G'
TypeError: 'str' object does not support item assignment

 

4. 슬라이싱(Slicing)

우리가 전에 알아본 인덱싱(indexing)이 원하는 위치에 있는 문자를 가져올 수 있는 것이라면, 이번에 배울 슬라이싱(Slicing)을 통해 문자열을 통채로 꺼낼 수 있습니다. 슬라이싱이라는 단어만 보고도 케이크를 자르듯 문자열을 조각조각 썰어버릴 것 같은 느낌이 들지 않나요? 쉽게 말하면 슬라이싱을 통해서 문자열을 조각내어 일부만 가져온다고 할 수 있습니다. 슬라이싱은 '변수[시작 위치:끝 위치]'와 같이 사용하며, 이는 시작 위치부터 시작해서 끝 위치까지의 문자열을 가져온다는 것입니다.

위의 그림처럼 위치 2~5에 있는 문자열의 일부를 가져오고 싶다면 [2:5]라고 써야한다고 생각하겠지만, 끝 번호에 해당하는 문자는 포함이 되지 않습니다. 즉, 위 그림의 문자열을 가져오려면 [2:6]라고 써야 합니다. 상당히 혼동이 오실지도 모르겠는데, 여러 번 사용하다 보면 적응되니 걱정하지 않으셔도 될 듯합니다. 우선 한번 사용해보도록 합시다.

 

1  
2
3
4
5
6
7
>>> var = "python is best language ever"
>>> var[2:6]
'thon'
>>> var[3:7]
'hon '
>>> var[0:15]
'python is best '

 

위 코드에서 [2:6]은 위치 2에서 위치 5까지의 문자열을 가져옵니다. (위에서 말한대로, 끝 위치에 존재하는 문자는 포함되지 않기 때문에 6은 포함하지 않습니다) [3:7]은 위치 3에서 위치 6까지의 문자열을, [0:15]는 위치 0에서 위치 15까지의 문자열을 가져오는 것입니다. 인덱싱과 마찬가지로 시작 위치와 끝 위치에 음수가 들어갈 수 있는데, 이는 문자열을 가장 뒤에서부터 읽어서 문자열을 잘라올 수 있습니다.

위 문자열에서 위치 -13부터 시작하여 위치 -6까지의 문자열을 가져오려면, [-13:-5]라고 써야 합니다. 여기도 마찬가지로 위치 -5에 해당하는 문자는 포함이 되지 않기 때문에 실제로는 위치 -13부터 위치 -5까지의 문자열을 가져옵니다. 아래의 예를 한번 보도록 합시다.

 

1  
2
3
4
5
>>> var = "python is best language ever"
>>> var[-13:-5]
'language'
>>> var[-15:-6]
't languag'

 

위 코드와 결과를 보시면, 우리의 예상대로 "language"라는 일부 문자열을 가져왔음을 확인하실 수 있습니다. 이번에는 한번 처음 위치나 끝 위치를 생략하여 결과를 살펴보도록 하겠습니다.

 

1  
2
3
4
5
6
7
>>> var = "0123456789"
>>> var[2:]
'23456789'
>>> var[:5]
'01234'
>>> var[:]
'0123456789'

 

위 코드와 결과에서 끝 위치를 생략하면 처음 위치부터 시작하여 끝까지 문자열을 읽어오며, 시작 위치를 생략하면 처음부터 끝 위치까지 문자열을 읽어오고, 둘 다 생략하면 처음부터 끝을 읽어오라는 의미이기 때문에 문자열 전체를 가져오게 됩니다. 이해가 되시나요? 개념이 잘 이해가 되지 않더라도 조급해하지 마시고 천천히 읽어보셔서 이해를 해보시길 바랍니다.

 


간단 Test!!

○ 문자열 길이 구하기 : len()

1
2
3
>>> message = '안녕하세요!'
>>> str_len = len(message)
>>> print('문자열의 길이 : ' + str(str_len))

결과 : 문자열 길이 : 6

 

○ 문자열 포멧팅

1
2
3
4
5
6
>>> color = '빨강'
>>> s = '나는 %s을 좋아합니다.' % color
>>> print(s) 나는 빨강을 좋아합니다.
>>> color = '초록'
>>> s = '나는 %s을 좋아합니다.' % color
>>> print(s)

결과 : 나는 초록을 좋아합니다.

문자열 포맷팅을 제공하는 코드는 기존 C언어와 같은 서식 문자를 사용합니다.

기본 코드를 응용하면 아래와 같이 사용이 가능하다.

1
2
3
4
5
6
>>> kor = 88
>>> eng = 95
>>> math = 97
>>> sum = kor + eng + math
>>> avg = sum/3
>>> print('합계 : %d, 평균 : %.2f' % (sum, avg))

정답 : 합계 : 280, 평균 : 93.33

 

1
2
3
4
5
6
>>> a = 77
>>> b = '자전거'
>>> c = 3.3737737
>>> d = 90

>>> print('%d, %s, %.2f, %d%%, %6s, %5d' % (a, b, c, d, b, a))

정답 : 77, 자전거, 3.37, 90%, 자전거, 77

 

↘↘↘↘↘↘↘교육관련문의↘↘↘↘↘↘↘↘

https://blog.naver.com/grinbi0921

 

IT+LIFE : 네이버 블로그

Programming(C,C++,JAVA) CAD(ATC,CADTC) 정보보안, 스크래치, COS, COSPro

blog.naver.com

 

댓글