1. 큰따옴표(")로 양쪽 둘러싸기
"Hello World"
2. 작은따옴표(')로 양쪽 둘러싸기
'Python is fun'
3. 큰따옴표 3개를 연속(""")으로 써서 양쪽 둘러싸기
"""Life is too short, You need python"""
4. 작은따옴표 3개를 연속(''')으로 써서 양쪽 둘러싸기
'''Life is too short, You need python'''
문자열을 표현하는 작은따옴표, 큰따옴표 기호가 포함된 문자열을 만들 때 참고 사항
작은따옴표(') 가 포함된 문자열을 감쌀 때는 큰따옴표(")를 사용해서 문자열을 생성한다.
큰따옴표(")가 포함된 문자열을 감쌀 때는 작은따옴표(')를 사용해서 문자열을 생성한다.
즉, 문장 내 포함되어 있는 기호 외 다른 기호를 사용하여 문자열로 만들어야 한다.
"Python's favorite food is perl"
5. 백슬래시(\\)를 사용해서 작은따옴표(')와 큰따옴표(")를 문자열에 포함시키기
'Python\\'s favorite food is perl'
"\\"Python is very easy.\\" he says."
작은따옴표(')나 큰따옴표(")를 문자열에 포함시키는 또 다른 방법은 백슬래시(\\)를 사용하는 것이다. 즉 백슬래시(\\)를 작은따옴표(')나 큰따옴표(") 앞에 삽입하면 백슬래시(\\) 뒤의 작은따옴표(')나 큰따옴표(")는 문자열을 둘러싸는 기호의 의미가 아니라 문자 ('), (") 그 자체를 뜻하게 된다.
이스케이프 코드 사용 시 문자열 표현
\n | 문자열 안에서 줄을 바꿀 때 사용 |
\t | 문자열 사이에 탭 간격을 줄 때 사용 |
\\ | 문자 \를 그대로 표현할 때 사용 |
\' | 작은따옴표(')를 그대로 표현할 때 사용 |
\" | 큰따옴표(")를 그대로 표현할 때 사용 |
\r | 캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동) |
\f | 폼 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동) |
\a | 벨 소리(출력할 때 PC 스피커에서 '삑' 소리가 난다) |
\b | 백 스페이스 |
\000 | 널 문자 |
문자열에서 이스케이프 코드 사용 시 작은따옴표(''') 3개 또는 큰따옴표(""") 3개를 사용해야 한다.
예) 줄을 바꾸기 위한 이스케이프 코드 \\n 삽입하기
"Life is too short\\nYou need python"
출력 : Life is too short\\nYou need python
"""Life is too short\\nYou need python"""
출력 :
Life is too short
You need python
문자열 연산
문자열 더해서 연결하기(Concatenation)
>>> head = "Python"
>>> tail = " is fun!"
>>> head + tail
'Python is fun!'
위 소스 코드에서 세 번째 줄을 보면 "Python"이라는 head 변수와 " is fun!"이라는 tail 변수를 더한 것이다.
결과는 'Python is fun!'이다. 즉 head와 tail 변수가 +에 의해 합쳐진 것이다.
문자열 곱하기
>>> a = "python"
>>> a * 2
'pythonpython'
문자열 길이 구하기
문자열의 길이는 다음과 같이 len 함수를 사용하면 구할 수 있다.
len 함수는 print 함수처럼 파이썬의 기본 내장 함수로 별다른 설정 없이 바로 사용할 수 있다.
>>> a = "Life is too short"
>>> len(a)
17
문자열 인덱싱이란?
>>> a = "Life is too short, You need Python"
위 소스 코드에서 변수 a에 저장한 문자열의 각 문자마다 번호를 매겨 보면 다음과 같다.
Life is too short, You need Python
0 1 2 3
0123456789012345678901234567890123
"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이 왜 네 번째 문자를 뜻하는지 의아할 수도 있다. 사실 이 부분이 헷갈릴 수 있는 부분인데, 이렇게 생각하면 쉽게 알 수 있을 것이다.
"파이썬은 0부터 숫자를 센다."
따라서 파이썬은 위 문자열을 다음과 같이 바라보고 있다.
문자열 인덱싱 활용하기
인덱싱 예를 몇 가지 더 보자.
>>> 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]은 뒤에서부터 세어 첫 번째가 되는 문자를 말한다. a의 값은 "Life is too short, You need Python" 문자열이므로 뒤에서부터 첫 번째 문자는 가장 마지막 문자 'n'이다.
뒤에서부터 첫 번째 문자를 표시할 때도 0부터 세어 "a[-0]이라고 해야 하지 않을까?"라는 의문이 들 수도 있겠지만 잘 생각해 보자. 0과 -0은 똑같은 것이기 때문에 a[-0]은 a[0]과 똑같은 값을 보여 준다.
>>> a[-0]
'L'
계속해서 몇 가지 예를 더 보자.
>>> a[-2]
'o'
>>> a[-5]
'y'
위 첫 번째 예는 뒤에서부터 두 번째 문자를 가리키는 것이고, 두 번째 예는 뒤에서부터 다섯 번째 문자를 가리키는 것이다.
문자열 슬라이싱이란?
>>> a = "Life is too short, You need Python"
>>> 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라는 단어를 뽑아낼 수 있지 않을까? 다음 예로 확인해 보자.
>>> a[0:3]
'Lif'
이렇게 되는 이유는 간단하다. 슬라이싱 기법으로 a[시작 번호:끝 번호]를 지정할 때 끝 번호에 해당하는 것은 포함하지 않기 때문이다. a[0:3]을 수식으로 나타내면 다음과 같다.
0 <= a < 3
이 수식을 만족하는 것은 a[0], a[1], a[2]이다. 따라서 a[0:3]은 'Lif'이고 a[0:4]는 'Life'가 되는 것이다. 이 부분이 문자열 연산에서 가장 혼동하기 쉬운 부분이니 장 마지막의 연습 문제를 많이 풀어 보면서 몸에 익히기 바란다.
a[시작 번호:끝 번호]에서 끝 번호 부분을 생략하면 시작 번호부터 그 문자열의 끝까지 뽑아낸다.
>>> a[19:]
'You need Python'
a[시작 번호:끝 번호]에서 시작 번호를 생략하면 문자열의 처음부터 끝 번호까지 뽑아낸다.
>>> a[:17]
'Life is too short'
a[시작 번호:끝 번호]에서 시작 번호와 끝 번호를 생략하면 문자열의 처음부터 끝까지를 뽑아낸다.
>>> a[:]
'Life is too short, You need Python'
슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있다.
>>> a[19:-7]
'You need'
위 소스 코드에서 a[19:-7]이 뜻하는 것은 a[19]에서부터 a[-8]까지를 말한다. 이 역시 a[-7]은 포함하지 않는다.
문자열 포매팅(Formatting)
문자열 포맷 코드
문자열 포매팅 예제에서는 대입해 넣는 자료형으로 정수와 문자열을 사용했으나 이 외에도 다양한 것을 대입할 수 있다.
문자열 포맷 코드로는 다음과 같은 것이 있다.
%s | 문자열(String) |
%c | 문자 1개(character) |
%d | 정수(Integer) |
%f | 부동소수(floating-point) |
%o | 8진수 |
%x | 16진수 |
%% | Literal % (문자 % 자체) |
1. 숫자 바로 대입
>>> "I eat %d apples." % 3
'I eat 3 apples.'
위 예제의 결과값을 보면 알겠지만 위 예제는 문자열 안에 정수 3을 삽입하는 방법을 보여 준다. 문자열 안에서 숫자를 넣고 싶은 자리에 %d 문자를 넣어 주고, 삽입할 숫자 3은 가장 뒤에 있는 % 문자 다음에 써 넣었다. 여기에서 %d는 문자열 포맷 코드라고 부른다.
2. 문자열 바로 대입
문자열 안에 꼭 숫자만 넣으라는 법은 없다. 이번에는 숫자 대신 문자열을 넣어 보자.
>>> "I eat %s apples." % "five"
'I eat five apples.'
위 예제에서는 문자열 안에 또 다른 문자열을 삽입하기 위해 앞에서 사용한 문자열 포맷 코드 %d가 아닌 %s를 썼다. 어쩌면 눈치 빠른 독자는 벌써 유추하였을 것이다. 숫자를 넣기 위해서는 %d를 써야 하고, 문자열을 넣기 위해서는 %s를 써야 한다는 사실을 말이다.
- 문자열을 대입할 때는 앞에서 배운 것처럼 큰따옴표나 작은따옴표를 반드시 써주어야 한다.
3. 숫자 값을 나타내는 변수로 대입
>>> number = 3
>>> "I eat %d apples." % number
'I eat 3 apples.'
1번처럼 숫자를 바로 대입하나 위 예제처럼 숫자 값을 나타내는 변수를 대입하나 결과는 같다.
4. 2개 이상의 값 넣기
그렇다면 문자열 안에 1개가 아닌 여러 개의 값을 넣고 싶을 땐 어떻게 해야 할까?
>>> number = 10
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'
[포매팅 연산자 %d와 %를 같이 쓸 때는 %%를 쓴다]
따라서 위 예를 제대로 실행하려면 다음과 같이 해야 한다.
>>> "Error is %d%%." % 98
'Error is 98%.'
format 함수를 사용한 포매팅
문자열의 format 함수를 사용하면 좀 더 발전된 스타일로 문자열 포맷을 지정할 수 있다. 앞에서 살펴본 문자열 포매팅 예제를 format 함수를 사용해서 바꾸면 다음과 같다.
숫자 바로 대입하기
>>> "I eat {0} apples".format(3)
'I eat 3 apples'
"I eat {0} apples" 문자열 중 {0} 부분이 숫자 3으로 바뀌었다.
문자열 바로 대입하기
>>> "I eat {0} apples".format("five")
'I eat five apples'
문자열의 {0} 항목이 five라는 문자열로 바뀌었다.
숫자 값을 가진 변수로 대입하기
>>> number = 3
>>> "I eat {0} apples".format(number)
'I eat 3 apples'
문자열의 {0} 항목이 number 변수 값인 3으로 바뀌었다.
2개 이상의 값 넣기
>>> number = 10
>>> day = "three"
>>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
'I ate 10 apples. so I was sick for three days.'
2개 이상의 값을 넣을 경우 문자열의 {0}, {1}과 같은 인덱스 항목이 format 함수의 입력값으로 순서에 맞게 바뀐다. 즉 위 예에서 {0}은 format 함수의 첫 번째 입력값인 number로 바뀌고 {1}은 format 함수의 두 번째 입력값인 day로 바뀐다.
이름으로 넣기
>>> "I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
'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 값으로 각각 바뀌는 것을 보여 주고 있다.
인덱스와 이름을 혼용해서 넣기
>>> "I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
'I ate 10 apples. so I was sick for 3 days.'
위와 같이 인덱스 항목과 name=value 형태를 혼용하는 것도 가능하다.
왼쪽 정렬
>>> "{0:<10}".format("hi")
'hi '
:<10 표현식을 사용하면 치환되는 문자열을 왼쪽으로 정렬하고 문자열의 총 자릿수를 10으로 맞출 수 있다.
오른쪽 정렬
>>> "{0:>10}".format("hi")
' hi'
오른쪽 정렬은 :< 대신 :>을 사용하면 된다. 화살표 방향을 생각하면 어느 쪽으로 정렬되는지 바로 알 수 있을 것이다.
가운데 정렬
>>> "{0:^10}".format("hi")
' hi '
:^ 기호를 사용하면 가운데 정렬도 가능하다.
공백 채우기
>>> "{0:=^10}".format("hi")
'====hi===='
>>> "{0:!<10}".format("hi")
'hi!!!!!!!!'
정렬할 때 공백 문자 대신에 지정한 문자 값으로 채워 넣는 것도 가능하다. 채워 넣을 문자 값은 정렬 문자 <, >, ^ 바로 앞에 넣어야 한다. 위 예에서 첫 번째 예제는 가운데(^)로 정렬하고 빈 공간을 = 문자로 채웠고, 두 번째 예제는 왼쪽(<)으로 정렬하고 빈 공간을 ! 문자로 채웠다.
소수점 표현하기
>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
'3.4213'
위 예는 format 함수를 사용해 소수점을 4자리까지만 표현하는 방법을 보여 준다. 앞에서 살펴보았던 표현식 0.4f를 그대로 사용한 것을 알 수 있다.
>>> "{0:10.4f}".format(y)
' 3.4213'
위와 같이 자릿수를 10으로 맞출 수도 있다. 역시 앞에서 살펴본 10.4f의 표현식을 그대로 사용한 것을 알 수 있다.
{ 또는 } 문자 표현하기
>>> "{{ and }}".format()
'{ and }'
format 함수를 사용해 문자열 포매팅을 할 경우 { }와 같은 중괄호(brace) 문자를 포매팅 문자가 아닌 문자 그대로 사용하고 싶은 경우에는 위 예의 {{ }}처럼 2개를 연속해서 사용하면 된다.
f 문자열 포매팅
파이썬 3.6 버전부터는 f 문자열 포매팅 기능을 사용할 수 있다.
파이썬 3.6 미만 버전에서는 사용할 수 없는 기능이므로 주의해야 한다.
다음과 같이 문자열 앞에 f 접두사를 붙이면 f 문자열 포매팅 기능을 사용할 수 있다.
>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'
f 문자열 포매팅은 위와 같이 name, age와 같은 변수 값을 생성한 후에 그 값을 참조할 수 있다.
또한 f 문자열 포매팅은 표현식을 지원하기 때문에 다음과 같은 것도 가능하다.
>>> age = 30
>>> f'나는 내년이면 {age+1}살이 된다.'
'나는 내년이면 31살이 된다.'
딕셔너리는 f 문자열 포매팅에서 다음과 같이 사용할 수 있다.
- 딕셔너리는 Key와 Value라는 것을 한 쌍으로 갖는 자료형이다.
>>> d = {'name':'홍길동', 'age':30}
>>> f'나의 이름은 {d["name"]}입니다. 나이는 {d["age"]}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'
소수점은 다음과 같이 표현할 수 있다.
>>> y = 3.42134234
>>> f'{y:0.4f}' # 소수점 4자리까지만 표현
'3.4213'
>>> f'{y:10.4f}' # 소수점 4자리까지 표현하고 총 자리수를 10으로 맞춤
' 3.4213'
문자열 관련 함수들
문자열 자료형은 자체적으로 함수를 가지고 있다. 이들 함수를 다른 말로 문자열 내장 함수라 한다. 이 내장 함수를 사용하려면 문자열 변수 이름 뒤에 ‘.’를 붙인 다음에 함수 이름을 써주면 된다. 이제 문자열의 내장 함수에 대해서 알아보자.
문자 개수 세기(count)
>>> a = "hobby"
>>> a.count('b')
2
문자열 중 문자 b의 개수를 돌려준다.
위치 알려주기1(find)
>>> a = "Python is the best choice"
>>> a.find('b')
14
>>> a.find('k')
-1
문자열 중 문자 b가 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.
*파이썬은 숫자를 0부터 세기 때문에 b의 위치는 15가 아닌 14가 된다.
위치 알려주기2(index)
>>> a = "Life is too short"
>>> a.index('t')
8
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
문자열 중 문자 t가 맨 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 오류를 발생시킨다. 앞의 find 함수와 다른 점은 문자열 안에 존재하지 않는 문자를 찾으면 오류가 발생한다는 점이다.
문자열 삽입(join)
>>> ",".join('abcd')
'a,b,c,d'
abcd 문자열의 각각의 문자 사이에 ','를 삽입한다.
join 함수는 문자열뿐만 아니라 앞으로 배울 리스트나 튜플도 입력으로 사용할 수 있다(리스트와 튜플은 곧 배울 내용이니 여기에서는 잠시 눈으로만 살펴보자). join 함수의 입력으로 리스트를 사용하는 예는 다음과 같다.
>>> ",".join(['a', 'b', 'c', 'd'])
'a,b,c,d'
소문자를 대문자로 바꾸기(upper)
>>> a = "hi"
>>> a.upper()
'HI'
upper 함수는 소문자를 대문자로 바꾸어 준다. 만약 문자열이 이미 대문자라면 아무 변화도 일어나지 않을 것이다.
대문자를 소문자로 바꾸기(lower)
>>> a = "HI"
>>> a.lower()
'hi'
lower 함수는 대문자를 소문자로 바꾸어 준다.
왼쪽 공백 지우기(lstrip)
>>> a = " hi "
>>> a.lstrip()
'hi '
문자열 중 가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다. lstrip에서 l은 left를 의미한다.
오른쪽 공백 지우기(rstrip)
>>> a= " hi "
>>> a.rstrip()
' hi'
문자열 중 가장 오른쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다. rstrip에서 r는 right를 의미한다.
양쪽 공백 지우기(strip)
>>> a = " hi "
>>> a.strip()
'hi'
문자열 양쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다.
문자열 바꾸기(replace)
>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'
replace(바뀌게 될 문자열, 바꿀 문자열)처럼 사용해서 문자열 안의 특정한 값을 다른 값으로 치환해 준다.
문자열 나누기(split)
>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> b = "a:b:c:d"
>>> b.split(':')
['a', 'b', 'c', 'd']
split 함수는 a.split()처럼 괄호 안에 아무 값도 넣어 주지 않으면 공백(스페이스, 탭, 엔터 등)을 기준으로 문자열을 나누어 준다. 만약 b.split(':')처럼 괄호 안에 특정 값이 있을 경우에는 괄호 안의 값을 구분자로 해서 문자열을 나누어 준다. 이렇게 나눈 값은 리스트에 하나씩 들어가게 된다. ['Life', 'is', 'too', 'short']나 ['a', 'b', 'c', 'd']가 리스트인데 02-3에서 자세히 알아볼 것이니 여기에서는 너무 신경 쓰지 않아도 된다.
[출처] Do it! 점프 투 파이썬
'프로그래밍_기타 언어' 카테고리의 다른 글
파이썬(python) 숫자형 (0) | 2024.09.22 |
---|---|
파이썬(python) 리스트(list) (0) | 2024.09.22 |
파이썬(python) 집합 자료형 (0) | 2024.09.22 |
파이썬(python) 딕셔너리(Dictionary) (0) | 2024.09.22 |
파이썬(python) 튜플과 리스트 차이 (0) | 2024.09.22 |