어떤 프로그래밍 언어든 '그 언어의 자료형을 알고 이해할 수 있다면 이미 그 언어의 절반을 터득한 것이나 다름 없다'는 말이 있다.
자료형이란 프로그래밍을 할 때 쓰이는 숫자, 문자열 등 자료 형태로 사용하는 모든 것을 뜻한다. 프로그램의 기본이자 핵심 단위가 바로 자료형 이다.
숫자형(Number) 이란 숫자 형태로 이루어진 자료형으로, 우리가 이미 잘 알고 있는 것이다. 우리가 흔히 사용하는 것을 생각해 보자. 123 같은 정수, 12.34 같은 실수, 드물게 사용하긴 하지만 8진수나 16진수 같은 것도 있다.
항목 | 파이썬 사용 예 |
---|---|
정수 | 123, -345, 0 |
실수 | 123.45, -1234.5, 3.4e10 |
8진수 | 0o34, 0o25 |
16진수 | 0x2A, 0xFF |
정수형(Integer) 이란 말 그대로 정수를 뜻하는 자료형을 말한다. 다음 예는 양의 정수와 음의 정수, 숫자 0을 변수 a에 대입하는 예이다.
>>> a = 123
>>> a = -178
>>> a = 0
파이썬에서 실수형(Floating-point)은 소수점이 포함된 숫자를 말한다. 다음은 실수를 변수 a에 대입하는 예이다.
>>> a = 1.2
>>> a = -3.45
위 방식은 우리가 일반적으로 볼 수 있는 실수형의 소수점 표현 방식이다.
>>> a = 4.24E10
>>> a = 4.24e-10
여기에서 4.24E10은 4.2410^10, 4.24e-10은 4.2410^-10 을 의미한다.
프로그래밍을 한 번도 해본 적이 없는 독자라도 사칙연산(+, -, *, /)은 알고 잇을 것이다. 파이썬 역시 계산기와 마찬가지로 다음처럼 연산자를 사용해 사칙연산을 수행한다.
>>> a = 3
>>> b = 4
>>> a + b
>>> 7
>>> a * b
>>> 12
>>> a / b
>>> 0.75
>>> a ** b
>>> 81
>>> 7 % 3
>>> 1
>>> 3 % 7
>>> 3
>>> 7 // 4
>>> 1
문자열(String)이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 것들이 문자열이다.
"Life is too short, You need Python"
"a"
"123"
위 문자열 예문을 보면 모두 큰따옴표 ("") 로 둘러싸여 있다. '123 은 왜 문자열이지?' 라는 의문이 드는 독자도 있을 것이다. 따옴표로 둘러싸여 있으면 모두 문자열이라고 보면 된다.
파이썬에서 문자열을 만드는 방법은 총 4가지이다.
"Hello World"
'Python is fun'
"""Life is too short, You need Python"""
'''Life is too short, You need Python'''
단순함이 자랑인 파이썬이 문자열을 만드는 방법은 왜 4가지나 가지게 되었을까? 그 이유에 대해 알아보자.
문자열 안에 작은따옴표나 큰따옴표를 포함시키고 싶을 때
문자열을 만들어 주는 주인공인 작은따옴표(')와 큰따옴표(")이다. 그런데 문자열 안에도 작은따옴표와 큰따옴표가 들어 있어야 할 경우가 있다. 이때는 좀 더 특별한 기술이 필요하다.
Python's favorite food is perl
위와 같은 문자열을 food 변수에 저장하고 싶다고 가정하자. 문자열 중 Python's 에 작은따옴표(') 가 포함되어 있다.
이럴때는 다음과 같이 문자열을 큰따옴표 (") 로 둘러싸야 한다. 큰따옴표 안에 들어 있는 작은 따옴표는 문자열을 나타내기 위한 기호로 인식되지 않는다.
"python's favorite food is perl"
만약 큰따옴표 (") 가 아닌 작은따옴표 (') 로 문자열을 둘러싼 후 다시 실행하면 'Python' 이 문자열로 인식되어 구문 오류 (SyntaxError) 가 발생할 것이다.
"Python is very easy." he says.
위와 같이 큰따옴표 (") 가 포함된 문자열이라면 어떻게 해야 큰따옴표가 제대로 표현될까?
다음과 같이 문자열을 작은 따옴표 (') 로 둘러싸면 된다.
'"Python is very easy." he says.'
이렇게 작은따옴표 (') 안에 사용된 큰따옴표 (") 는 문자열을 만드는 기호로 인식되지 않는다.
'Python\'s favorite food is perl'
"\"Python is very easy.\" he says."
여러 줄인 문자열을 변수에 대입하고 싶을 때
문자열이 항상 한 줄 짜리만 있는 것은 아니다. 다음과 같이 여러 줄의 문자열을 변수에 대입하려면 어떻게 해야할까?
Life is too short
You need python
"Life is too short\nYou need python"
위 예처럼 줄바꿈 문자 '\n' 을 삽입하는 방법이 있지만 읽기에 불편하고 줄이 길어지는 단점이 있다.
위 1번의 단점을 극복하기 위해 파이썬에서는 다음과 같이 작은따옴표 3개 (''') 또는 큰따옴표 3개 (""") 를 사용한다.
"""
Life is too short
YOU Need Python
"""
'''
Life is too short
You need Python
'''
이스케이프 코드란?
이스케이프 코드란 프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 '문자 조합'이다. 주로 출력물을 보기 좋게 정렬하는 용도로 사용한다.
코드 | 설명 |
---|---|
\ n | 문자열 안에서 줄을 바꿀 때 사용 |
\ t | 문자열 사이에 탭 간격을 줄 때 사용 |
\ \ | 문자 \ 를 그대로 표현할 때 사용 |
\ ' | 작은따옴표 (') 를 그대로 표현할 때 사용 |
\ " | 큰따옴표 (") 를 그대로 표현할 때 사용 |
파이썬에서는 문자열을 더하거 곱할 수 있다. 다른 언어에서는 쉽게 찾아볼 수 없는 재미있는 기능으로, 우리 생각을 그대로 반영해 주는 파이썬만의 장저이라고 할 수 있다.
문자열을 더하거나 곱하는 방법에 대해 알아보자
>>> head = "Python"
>>> tail = "is fun!"
>>> head + tail
>>> 'python is fun!'
>>> a = "Python"
>>> a * 2
>>> 'PythonPython'
print("="*50)
print("My program")
print("="*50)
>>>
==================================
My Program
==================================
문자열의 길이는 다음과 같이 lan 함수를 사용하면 구할 수 있다. len 함수는 print 함수처럼 파이썬의 기본 내장 함수로 별다른 설정 없이 바로 사용할 수 있다.
a="Life is too short"
print(len(a))
>>> 17
인덱싱 (indexing) 이란 무엇인가를 '가리킨다'는 의미이고, 슬라이싱 (slicing) 은 무엇인가를 '잘라낸다' 는 의미이다.
"Life is too short, You need Python"
문자열에서 L은 첫 번째 자리를 뜻하는 숫자 0, 바로 다음인 i 는 1 이런 식으로 계속 번호를 붙인 것이다. 중간에 잇는 short의 s는 12가 된다.
이제 다음 예를 실행해 보자.
a = "Life is too short, You need Python"
a[3]
>>> 'e'
a[3]이 뜻하는 것은 a라는 문자열의 네 번째 문자 e를 말한다. 프로그래밍을 처음 접하는 사람이라면 a[3] 에서 숫자 3이 왜 네 번째 문자를 뜻하는지 의아할 수 있다. 사실 이 부분이 헷갈릴 수 있는 부분인데, 이렇게 생각하면 쉽게 알 수 있을 것이다.
따라서 파이썬은 위 문자열을 다음과 같이 바라보고 있다.
a[0]: 'L', a[1]: 'i', a[2]: 'f', a[3]: 'e', a[4]: ' ', ...
0 부터 숫자를 센다는 것이 처음에는 익숙하지 않겠지만 계속 사용하다 보면 자연스러워질 것이다. 위 예에서 볼 수 있듯이 a[번호] 는 문자열 안의 특정한 값을 뽑아내는 역할을 한다. 이러한 작업을 인덱싱이라고 한다.
인덱싱 예를 몇 가지 더 보자.
a = "Life is too short, You need python"
a[0]
>>> 'L'
a[12]
>>> 's'
a[-1]
>>> 'n'
앞의 a[0] 과 a[12] 는 쉽게 이해할 수 있는데 마지막의 a[-1] 이 뜻하는 것은 뭘까? 눈치 빠른 사람은 이미 알아챘겠지만 문자열을 뒤에서부터 읽기 위해 마이너스(-) 기호를 붙이는 것이다.
즉 a[-1] 은 뒤에서부터 세어 첫 번째가 되는 문자를 말한다.
뒤에서부터 첫 번째 문자를 표시할 때도 0부터 세어 'a[-0] 이라고 해야하지 않을까?' 라는 의문이 들 수도 있겠지만 잘 생각해 보자. 0과 -0은 똑같은 것이기 때문에 a[-0] 은 a[0] 과 똑같은 값을 보여준다.
a[-0]
>>> 'L'
계속해서 몇 가지 예를 더 보자.
a[-2]
>>> 'o'
a[-5]
>>> 'y'
위 첫 번째 예는 뒤에서부터 두 번째 문자를 가리키는 것이고, 두 번째 예는 뒤에서부터 다섯 번째 문자를 가리키는 것이다.
그렇다면 "Life is too short, You need Python" 문자열에서 단순히 한 문자만을 뽑아내는 것이 아니라 'Life' 또는 'You' 같은 단어를 뽑아내는 방법은 없을까?
다음과 같이 하면 된다.
a = "Life is too short, You need Python"
b = a[0] + a[1] + a[2] + a[3]
print(b)
>>> 'Life'
위 방법처럼 단순하게 접근할 수도 있지만 파이썬에서는 더 좋은 방법을 제공한다. 바로 슬라이싱(Slicing) 기법이다. 위 예는 슬라이싱 기법으로 다음과 같이 간단하게 처리할 수 있다.
a = "Life is too short, You need Python"
print(a[0:4])
>>> 'Life'
a[0:4] 가 뜻하는 것은 a 문자열, 즉 "Life is too short, You need Python" 문장에서 자리 번호 0부터 4까지의 문자를 뽑아낸다는 뜻이다.
하지만 다음과 가은 의문이 생길것이다. a[0] 은 L, a[1] 은 i, a[2] 는 f, a[3]은 e 니까 a[0:3] 으로도 Life 라는 단어를 뽑아낼 수 있지 않을까?
다음 예로 확인해 보자.
print(a[0:3])
>>> 'Lif'
이렇게 되는 이유는 간단핟. 슬라이싱 기법으로 a[시작 번호:끝 번호] 를 지정할 때 끝 번호에 해당하는 것은 포함하지 않기 때문이다.
a[0:3] 을 수식으로 나타내면 다음과 같다.
0 <= a < 3
이 수식을 만족하는 것은 a[0], a[1], a[2] 이다. 따라서 a[0:3] 은 'Lif' 가 되는 것이다.
이 부분이 문자열 연산에서 가장 혼동하기 쉬운 부분이니 조심하자.
슬라이싱의 예를 조금 더 보자.
print(a[0:5])
>>> 'Life '
위 예는 a[0] + a[1] + a[2] + a[3] + a[4] 와 동일하다. a[4] 는 공백 문자이기 때문에 'Life' 가 아닌 'Life ' 가 출력된다. 공백 문자 역시 L, i, f, e 같은 문자와 동일하게 취급되는 것을 잊지 말자.
'Life' 와 'Life ' 는 완전히 다른 문자열이다.
슬라이싱할 때 항상 시작 번호가 0일 필요는 없다.
print(a[0:2])
>>> 'Li'
print(a[5:7])
>>> 'is'
print(a[12:17])
>>> 'short'
a[시작 번호:끝 번호] 에서 끝 번호 부분을 생략하면 시작 번호부터 그 문자열의 끝까지 뽑아 낸다.
print(a[19:])
>>> 'You need Python'
a[시작 번호:끝 번호]에서 시작 번호를 생략하면 문자열의 처음부터 끝 번호까지 뽑아낸다.
print(a[:17])
>>> 'Life is too short'
슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있다.
print(a[:])
>>> 'Life is too short, You need Python'
슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있다.
print(a[19:-7])
>>> 'You need'
위 소스 코드에서 a[19:-7]이 뜻하는 것은 a[19]에서부터 a[-8]까지를 말한다. 이 역시 a[-7]은 포함하지 않는다.
다음은 자주 사용하게 되는 슬라이싱 기법 중 하나이다.
a = "20010331Rainy"
date = a[:8]
weather = a[8:]
print(date)
>>> '20010331'
print(weather)
>>> 'Rainy'
위 예는 문자열 a를 두 부분으로 나누는 기법이다. 숫자 8을 기준으로 문자열 a를 양쪽으로 한 번씩 슬라이싱했다. a[:8]은 a[8]이 포함되지 않고, a[8:]은 a[8]을 포함하기 때문에 8을 기준으로 해서 두 부분으로 나눌 수 있는 것이다.
위 예에서는 "20010331Rainy" 문자열을 날짜를 나타내는 부분인 '20010331' 과 날씨를 나타내는 부분인 'Rainy' 로 나누는 방법을 보여 준다.
위 문자열 "20010331Rainy"를 연도 2001, 월과 일을 나타내는 0331, 날씨를 나타내는 Rainy의 새 부분으로 나누려면 다음과 같이 할 수 있다.
a = "20010331Rainy"
year = a[:4]
day = a[4:8]
weather = a[8:]
print(year)
>>> '2001'
print(day)
>>> '0331'
print(weather)
>>> 'Rainy'
지금까지 인덱싱과 슬라이싱에 대해서 살펴보았다, 인덱싱 슬라이싱은 프로그래밍을 할 때 매우 자주 사용하는 기법이니 꼭 반복해서 연습해 두자.
문자열에서 또 하나 알아야 할 것으로는 문자열 포매팅(Fomatting)이 있다. 이것을 공부하기 전에 다음과 같은 문자열을 출력하는 프로그램을 작성했다고 가정해 보자.
"현재 온도는 18도 입니다"
시간이 지나서 20도가 되면 다음 문장을 출력한다.
"현재 온도는 20도 입니다"
위 두 문자열은 모두 같은데 20이라는 숫자와 18이라는 숫자만 다르다. 이렇게 문자열 안의 특정한 값을 바꿔야 할 경우가 있을 때 이것을 가능하게 해주는 것이 바로 문자열 포매팅 기법이다.
쉽게 말해 문자열 포매팅이란 문자열 안에 어떤 값을 삽입하는 방법이다. 다음 예를 직업 실해해 보면서 그 사용법을 알아보자.
a = "I eat %d apples." %3
print(a)
>>> "I eat e apples"
위 예제의 결괏값을 보면 알겠지만 위 예제는 문자열 안에 정수 3을 삽입하는 방법을 보여 준다, 문자열 안에서 숫자를 넣고 싶은 자리에 %d 문자를 넣어 주고, 삽입할 숫자 3은 가장 뒤에 있는 % 문자 다음에 써 넣었다. 여기에서 %d 는 문자열 포맷 코드라고 부른다.
문자열 안에 꼭 숫자만 넣으라는 법은 없다. 이번에는 숫자 대신 문자열을 넣어 보자.
a = "I eat %s apples" %"five"
print(a)
>>> "I eat five apples"
위 예제에서는 문자열 안에 또 다른 문자열을 삽입하기 위해 앞에서 사용한 문자열 포맷 혹은 %d가 아닌 %s를 썼다. 숫자를 넣기 위해서는 %d 를 써야 하고, 문자열을 넣기 위해서는 %s 를 써야 한다.
number = 3
a = "I eat $d apples." %number
>>> "I eat 3 apples"
1번 처럼 숫자를 바로 대입하거나 위 예제처럼 숫자 값을 나타내는 변수를 대입하나 결과는 똑같다
그렇다면 문자열 안에 1개가 아닌 여러 개의 값을 넣고 싶을 댄 어떻게 해야 할까?
number = 10
day = "three"
a = "I eat %d apples, so I was sick for %s days" %(number, days)
print(a)
>>> "I eat 10 apples, so I was sick for three days"
위 예문처럼 2개 이상의 값을 넣으려면 마지막 % 다음 괄호 안에 콤마(,)로 구분하여 각각의 값을 넣어주면 된다.
문자열 포메팅 에제에서는 대입해 넣는 자료형으로 정수와 문자열을 사용하였으나 이 외에도 다양한 것을 대입할 수 있다. 문자열 포맷 코드는 다음과 같은 것이 있다.
코드 | 설명 |
---|---|
%s | 문자열(String) |
%c | 문자 1개(Character) |
%d | 정수(integer) |
%f | 부동 소수(Floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | Literal %(문자 '%' 자체) |
여기서 재미있는 것은 % 포맷 코드인데, 이 코드는 어떤 형태의 값이든 변환해 넣을 수 있다. 무슨 말인지 예를 통해 확인해 보자.
a = "I have %s apples" %3
print(a)
>>>"I have 3 apples"
b = "rate is %s" % 3.234
print(b)
>>> "rate is 3.234"
3을 문자열 안에 삽입하려면 %d를 사용하고, 3.234를 삽입하려면 %f 를 사용해야 한다. 하지만 %s 를 사용하면 이런 것을 생각하지 않아도 된다 왜냐하면 %s 는 자동으로 % 뒤에 있는 값을 문자열로 바꾸기 때문이다.
a = "Error is %d%%." % 98
print(a)
>>> 'Error is 98%'
위에서 보았듯이 %d, %s 등의 포멧 코드는 문자열 안에 어떤 값을 삽입하기 위해 사용한다. 하지만 포맷 코드를 수자와 함께 사용하면 더 유용하게 사용할 수 있다.
다음 예를 보고 따라해 보자.
a = "%10s" % "hi"
print(a)
>>>' hi'
앞의 예문에 %10s 는 전체 길이가 10개인 문자열 공간에서 대입되는 값을 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨 두라는 의미이다.
쉽게 표현하면 이렇다
상상해보자. 총 10칸의 칸이 있다. 10칸의 칸 안에 hi라는 문자를 쓰는 것이다.
10s는 10칸의 칸에 왼쪽으로 8칸을 비워놓고 오른쪽 끝 2칸에 h와 i를 넣어 완성하는 것이다. 그래서 위의 예시에서 출력값이
' hi'
가 나오는 것이다.
그렇다면 반대쪽인 왼쪽 정력은 %-10s가 될 것이다. 확인해보자.
a = "-10sjane" %'hi'
print(a)
>>> 'hi jane'
hi를 왼쪽으로 정렬하고 나머지는 공백으로 8칸을 채운 후 jane을 입력한 것을 볼 수 있다.
a = "%0.4f" % 3.42134234
print(a)
>>> '3.4213'
3.42134234를 소수점 네 번째 자리까지만 나타내고 싶은 경우에는 위와 같이 사용한다. 즉 여기서 '.'의의미는 소수점 포인트를 말하고 그 뒤의 숫자 4는 소수점 뒤에 나올 숫자의 개수를 말한다. 다음 예를 살펴보자.
a = "%10.4f" %3.42134234
print(a)
>>> ' 3.4213'
위 예는 숫자 3.42134234를 소수점 네 번째 자리까지만 표시하고 전체 길이가 10개인 문자열 공간에서 오른쪽으로 정렬하는 예를 보여 준다.
문자열의 format 함수를 사용하면 좀 더 발전된 스타일로 문자열 포맷을 저장할 수 있다. 앞에서 살펴본 문자열 포매팅 예제를 format 함수를 사용해서 바꾸면 다음과 같다.
숫자 바로 대입하기
a = "I eat {0} apples".format(3)
print(a)
>>> 'I eat 3 apples'
"I eat {0} apples" 문자열 중 {0} 부분이 숫자 3으로 바뀌었다.
문자열 바로 대입하기
a = "I eat {0} apples".format("five")
print(a)
>>> 'I eat five apples'
문자열의 {0} 항ㅁ목이 five 라는 문자열로 바뀌었다.
숫자 값을 가진 변수로 대입하기
number = 3
a = "I eat {0} apples.format(number)
print(a)
>>> 'I eat 3 apples'
문자열의 {0} 항목이 number 변수 값인 3으로 바뀌었다.
2개 이상의 값 넣기
number = 10
day = "three"
a = "I ate {0} apples so I was sick for {1} days.".format(number, day)
print(a)
>>> 'I ate 10 apples. so I was sick for three days.'
2개 이상의 값을 넣을 경우 문자열의 {0}, {1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서에 맞게 바뀐다.
즉 위 예에서 {0}은 format 함수의 첫 번째 입력값인 number로 바뀌고 {1}은 format 함수의 두 번재 입력값인 day로 바뀐다.
이름으로 넣기
a = "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
print (a)
>>> 'I ate 10 apples. so I was sick for 3 days.'
위 예에서 볼 수 있듯이 {0}, {1}과 같은 인덱스 항목 대신 더 편리한 {name} 형태를 사용하는 방법도 있다.
{name} 형태를 사용할 경우 format 함수에는 반드시 name = value와 같은 형태의 입력값이 있어야만 한다.
위 예에는 문자열의 {number}, {day}가 format 함수의 입력값인 number = 10, day = 3 값으로 각각 바뀌는 것을 보여주고 있다.
인덱스와 이름을 혼용해서 넣기
a = "I ate {0} apples. so I was sick for {day} days".format(10, day=3)
print(a)
>>> 'I ate 10 apples. so I was sick for 3 days.'
위와 같이 인덱스 항목과 name = value 형태를 혼용하는 것도 가능하다.
완쪽 정렬
a = "{0:<10}".format("hi")
print(a)
>>> 'hi '
:<10 표현식을 사용하면 치환되는 문자열을 왼쪽으로 정렬하고 문자열의 총 자릿수를 10으로 맞출 수 있다.
오른쪽 정렬
a = "{0:>10}".format("hi")
print(a)
>>> ' hi'
오른쪽 정렬은 :< 대신 :>을 사용하면 된다. 화살표 방향을 생각하면 어느 쪽으로 정렬되는지 바로 알 수 있을 것이다.
가운데 정렬
a = "{0:^10}".format("hi")
print(a)
>>> ' hi '
:^ 기호를 사용하면 가운데 정렬도 가능하다.
공백 채우기
a = "{0:=^10}".format("hi)
print(a)
>>> '====hi===='
b = "{0:!<10}".format("hi")
print(b)
>>> 'hi!!!!!!!!'
정렬할 때 공백 문자 대신에 지정한 문자 값으로 채워 넣는 것도 가능하다. 채워 넣을 문자 값은 정렬 문자<, >, ^ 바로 앞에 넣어야 한다. 위 예에서 첫 번째 예제는 가운데(^)로 정렬하고 빈 공간을 = 문자로 채웠고, 두 번째 예제는 왼쪽(<)으로 정렬하고 빈 공간을 ! 문자로 채웠다.
소수점 표현하기
y = 3.42134234
a = "{0:0.4f}".format(y)
print(a)
>>> '3.4213'
위 예는 format 함수를 사용해 소수점을 4자리까지만 표현하는 방법을 보여 준다. 앞에서 살펴보았던 표현식 o.4f를 그대로 사용한 것을 알 수 있다.
y = 3.42134234
a = "{0:10.4f}".format(y)
print(a)
>>>' 3.4213'
위와 같이 자릿수를 10으로 맞출 수도 있다. 역시 앞에서 살펴본 10.4f의 표현식을 그대로 사용한 것을 알 수 있다.
{또는} 문자 표현하기
a = "{{and}}".format()
print(a)
>>> '{and}'
format 함수를 사용해 문자열 포매팅을 할 경우 {}와 같은 중괄호 문자를 포매팅 문자가 아닌 문자 그대로 사용하고 싶은 경우에는 위 예의 {{}}처럼 2개를 연속해서 사용하면 된다.
파이썬 3.6 버전부터 f 문자열 포매팅 기능을 사용할 수 있다. 파이썬 3.6 미만 버전에서는 사용할 수 없는 기능으로 주의해야 한다.
다음과 같이 문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능을 사용할 수 있다.
name = '홍길동'
age = 30
a = f'나의 이름은 {name} 입니다. 나이는 {age} 입니다.'
print(a)
>>> '나의 이름은 홍길동입니다. 나이는 30입니다.'
f 문자열 포매팅은 위와 같이 name, age와 같은 변수 값을 생성한 후에 그 값을 참조할 수 있다.
또한 f 문자열 포매팅은 표현식을 지원하기 때문에 다음과 같은 것도 가능하다.
age = 30
a = f'나는 내년이면 {age+1}살이 된다.'
print(a)
>>> "나는 내년이면 31살이 된다."
딕셔너리는 f 문자열 포매팅에서 다음과 같이 사용할 수 있다.
d = {'name':'홍길동', 'age':30}
a = f'나의 이름은 {d["name"]} 입니다. 나이는 {d["age"]} 입니다."
print(a)
>>> '나의 이름은 홍길동 입니다. 나이는 30입니다.'
정렬은 다음과 같이 할 수 있다.
a = f'{"hi":<10}'
print(a)
>>> 'hi '
b = f'{"hi":>10}'
print(b)
>>> ' hi'
c = f'{"hi":^10}'
print(c)
>>> ' hi '
공백 채우기는 다음과 같이 할 수 있다.
a = f'{"hi":=^10}'
print(a)
>>> '====hi===='
b = f'{"hi":!<10}'
print(b)
>>> 'hi!!!!!!!!'
소수점은 다음과 같이 표현할 수 있다.
y = 3.42134234
a = f'{y:0.4f}'
print(a)
>>> '3.4213'
b = '{y:10.4f}'
print(b)
>>> '. 3.4213'
f 문자열에서 {} 문자를 표시하려면 다음과 같이 두 개를 동시게 사용해야 한다.
a = f'{{and}}'
print(a)
>>> '{and}'
지금까지는 문자열을 가지고 할 수 있는 기본적인 것에 대해 알아보았다. 이제부터는 문자열을 좀 더 자유자제로 다루기 위해 공부해야 할 것을 설명할 것이다.
문자열 자료형은 자체적으로 함수를 가지고 있다. 이들 함수를 다른 말로 문자열 내장 함수라 한다. 이 내장 함수를 사용하려면 문자열 변수 이름 뒤에 '.'를 붙인 다음에 함수 이름을 써주면 된다. 이제 문자열의 내장 함수에 대해 알아보자.
a = "hobby"
print(a.count('b'))
>>> 2
문자열 중 문자 b의 개수를 돌려준다.
a = "Python is the best choice"
print(a.find('b'))
>>> 14
print(a.find('k))
>>> -1
문자열 중 문자 b가 처음으로 나온 위치를 반환한다, 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.
(Python은 숫자 카운트를 1이 아닌 0에서 부터 시작한다는걸 잊지말자!)
a = "Life is too short"
print(a.index('t'))
>>> 8
print(a.index('k'))
>>> error(실제로 이렇게 나오진 않음)
문자열 중 문자 t가 맨 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 오류를 발생시킨다. 앞의 find 함수와 다른 점은 문자열 안에 존재하지 않는 문자를 찾으면 오류가 발생한다는 점이다.
a = ",".join('abcd')
print(a)
>>> 'a,b,c,d'
abcd 문자열의 각각의 문자 사이에 ','를 삽입한다.
join 함수는 문자열뿐만 아니라 앞으로 배울 리스트나 튜플도 입력으로 사용할 수 있다. join 함수의 입력으로 리스트를 사용하는 예는 다음과 같다.
a = ",".join(['a', 'b', 'c', 'd'])
print(a)
>>> 'a,b,c,d'
a = "hi"
print(a.upper())
>>> 'HI'
upper 함수는 소문자를 대문자로 바꾸어 준다. 만약 문자열이 이미 대문자라면 아무 변화도 일어나지 않을 것이다.
a = "HI"
print(a.lower())
>>> 'hi'
lower 함수는 대문자를 소문자로 바꾸어 준다.
a = " hi "
print(a.lstrip())
>>> 'hi '
문자열 중 가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다. lstrip에서 l은 left를 의미한다.
a = " hi "
print(a.rstrip())
>>> ' hi'
문자열 중 가장 오른쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다. rstrip에서 r은 right를 의미한다.
a = " hi "
print(a.strip())
>>> 'hi'
문자열 양쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다.
a = "Life is too short"
print(a.replace("Life", "Your leg"))
>>> 'Your leg is too short'
replace 처럼 사용해서 문자열 안의 특정한 값을 다른 값으로 치환해준다.
a = "Life is too short"
print(a.split())
>>> ['Life', 'is', 'too', 'short']
b = "a:b:c:d"
print(b.split(:))
>>> ['a', 'b', 'c', 'd']
split 함수는 a.split() 처럼 괄호 안에 아무 값도 넣어 주지 않으면 공백을 기준으로 문자열을 나누어 준다.
만약 b.split(':') 처럼 괄호 안에 특정 값이 있을 경우에는 괄호 안의 값을 구분자로 해서 문자열을 나누어 준다 이렇게 나눈 값은 리스트에 하나씩 들어가게 된다.
['Life', 'is', 'too', 'short'] 나 ['a', 'b', 'c', 'd'] 가 리스트인데 다음 시간에 자세히 알아볼 것이니 여기서는 너무 신경 쓰지 않아도 된다.
위에서 소개한 문자열 관련 함수는 문자열 처리에서 사용 빈도가 매우 높고 유용하다. 이 외에도 몇 가지 더 있지만 자주 사용되지는 않는다.