문자열 자료형은 우리가 알고 있는 문자들을 열거한 자료형이다.
#
1. 문자열 표현방식
1) 큰 따음표(" ")로 둘러싸기
str = "Hello, world 1"
print(str)
2) 작은 따음표(' ')로 둘러싸기
str = 'Hello, world 2'
print(str)
3) 큰 따음표 연속 3개(""" """)로 둘러싸기
str = """Hello, world 3"""
print(str)
4) 작은 따음표 연속 3개(''' ''')로 둘러싸기
str = '''Hello, world 4'''
print(str)
문법적 간결함이 자랑인 파이썬이 문자열을 표현하는 방법을 4개나 가지고 있는 이유가 있다.
- 문자열 내부에 큰 따음표 혹은 작은 따음표를 포함시키고 싶을 때
pyfun = "Python's funny!"
print(pyfun)
큰 따음표 안에 있는 작은 따음표는 문자열기호로 인식되지 않고 하나의 문자로 인식이 된다.
pyfun = 'he said "Oh, Python is very funny!"'
print(pyfun)
작은 따움표 안에 있는 큰 따움표는 문자열기호로 인식되지 않고 하나의 문자로 인식이 된다.
한 번 큰 따움표 안에 큰따움표, 작은따움표 안에 작은 따움표를 넣고 실행해 보면 Syntax Error가 발생할 것이다. 확인해보기 바란다.
위의 방법 말고도 이스케이프 코드(escape code)를 사용하면 큰 따움표 안에 큰 따움표, 작은 다움표 안에 작은 따움표를 사용할 수 있다.
pyfun = 'Python\'s funny!'
print(pyfun)
\뒤에 오는 작은따움표 '는 문자열기호가 아닌 하나의 문자 자체로 인식이 된다.
pyfun = "he said \"Oh, Python is very funny!\""
print(pyfun)
\뒤에 오는 큰 따움표 "는 문자열기호가 아닌 하나의 문자 자체로 인식이 된다.
- 여러 줄로 된 문장을 변수에 저장하고 싶을 때
pyfun = """
Life is too short
You need Python
"""
print(pyfun)
큰 따움표 세 개를 사용하면 여러줄의 문자열을 변수에 저장할 수 있다.
pyfun = '''
Life is too short
You need Python
'''
print(pyfun)
작은 따움표 세 개를 사용하면 여러줄의 문자열을 변수에 저장할 수 있다.
사실 이스케이프 코드(escape code)를 사용해서 여러줄의 문자열을 표현할 수 있기도 하다.
pyfun = "Life is too short\n You need Python"
print(pyfun)
pyfun = 'Life is too short\n You need Python'
print(pyfun)
Q. 이스케이프 코드란?
\n | 줄 바꿈 |
\t | 탭 간격 |
\</strong> | \를 하나의 문자로 인식 |
\' | '를 하나의 문자로 인식 |
\" | "를 하나의 문자로 인식 |
\r | 캐리지 리턴(줄바꿈, 현재 커서 가장 앞으로 이동) |
\f | 캐리지 리턴(줄바꿈, 현재 커서 다음 줄로 이동) |
\a | 벨 소리(출력을 하면 컴퓨터에서 '삑!' 소리) |
\b | 백 스페이스 |
\000 | 널(NULL) 문자 |
굳이 외우기 보다는 활용 빈도가 높은 것들을 위주로 이후 코드를 공부하다보면 알아서 익숙해질 것이다.
#
2. 문자열 연산
파이썬은 다른 프로그래밍 언어와 다르게 문자열 간의 연산이 가능하다.
first = "Python"
second = " is fun"
1) 문자열 더하기(연결)
print(first + second) #두 문자열이 이어서 나오게 된다.
2) 문자열 곱하기
print(first*5) #문자열이 5번 연속으로 출력된다.
#
3. 문자열 인덱싱(indexing)
pyfun = "Life is too short, You need Python"
첫 번째 문자부터 변수 pyfun의 index 0, index 1, index 2, … 이다.
print(pyfun[0]) # python에서 숫자는 1이 아닌 0부터 시작한다.
print(pyfun[1])
print(pyfun[2])
print(pyfun[3])
print(pyfun[4]) # space bar ' ' 역시 하나의 문자이다.
print(pyfun[5])
print(pyfun[6])
print("\n")
print(pyfun[-1]) # 뒤에서 부터 index를 읽으려면 -를 붙인 음수를 사용하면 된다.
print(pyfun[-2])
print(pyfun[-3])
4. 문자열 슬라이싱(slicing)
print(pyfun[0:4]) # 'Life'
print(pyfun[5:7]) # 'is'
print(pyfun[9:12]) # 'too'
파이썬에서 가장 혼동하기 쉬운 부분이 문자열 슬라이싱에서 index이다. [a:b]는 a에서 b-1 까지이다. 슬라이싱에서 마지막 index는 포함하지 않는 것이다. 즉, pyfun[a:b]는 a <= pyfun < b 이다.
print(pyfun[19:]) # 'You need Python' pyfun[시작:끝] 에서 끝을 비워두면 문자열의 마지막 index까지를 의미한다.
print(pyfun[:17]) # 'Life is too short' pyfun[시작:끝] 에서 시작을 비워두면 문자열의 처음 index부터를 의미한다.
print(pyfun[19:-7]) # 'You need' 음수도 사용 가능하다. -8은 d 이다. 역시나 index -7은 포함되지 않는다는 것을 잊지 말자.
5. 문자열 포매팅(formatting)
man = "My age is %d" # %d 는 정수를 표현하는 포맷 코드이다.
print(man %3) # %d 에 3이 대입된다.
print(man %5) # %d 에 5가 대입된다.
man = "My age is %d and I live in %s" # %s 는 문자열을 표현하는 포맷 코드이다.
print(man %(10, 'Seoul')) # 문자열 포맷 코드가 2개인 문장에는 괄호와 쉼표를 사용하여 구분해주면 된다.
num = 20
home = 'Busan'
print(man%(num,home)) # 문자열 포맷 코드에는 숫자나 문자열 자체가 아닌 변수 형태로도 대입이 된다.
woman = "My age is %s"
print(woman %5) # 한 가지 Tip은 사실 %s 포맷 코드는 % 뒤에 있는 자료형을 모두 문자열로 변환시키기 때문에 어떤 자료형이든 대입이 된다.
문자열 포매팅은 상황에 따라 특정 정보가 달라져야 하는 코드를 작성할 경우에 사용한다.
Q. 문자열 포맷 코드란?
%s | 문자열 |
%c | 문자 |
%d | 정수 |
%f | 실수 |
%0 | 8진수 |
%x | 16진수 |
%% | '%' (% 문자 자체) |
문자열 내부에 포맷 코드가 있을 경우 기호 %를 나타내기 위해서는 무조건 %% 로 2개를 사용해야 한다.
sale = "The ratio is %d%%"
print(sale %50) # The ratio is 50% 라는 문자열이 출력된다.
sale = "The ratio is 50%"
print(sale) # 물론 문자열 안에 전혀 포맷 코드가 없는 경우에는 %기호 하나로 %캐릭터 자체가 출력된다.
# 숫자가 포함된 포맷코드
say = "she answered%10s" # %10s는 문자열 저장을 위해 총 10칸의 문자열 길이를 할당하고 오른쪽 정렬을 한다.
print(say %'yes') # 'she answered yes' 를 출력한다. 총 10개의 문자열에서 3개의 yes가 오른쪽 정렬되어 왼쪽에 7개의 공백이 생긴다.
say = "%-10ssaid yes" # 문자열 칸을 총 10개 할당하고 왼쪽 정렬 하였으므로 오른쪽에 8개의 공백이 생긴다.
print(say %'he') # 'he said yes'
pi_1 = "pi is %0.2f" # 소수점 아래 2자리까지 표현
pi_2 = "pi is %0.4f" # 소수점 아래 4자리까지 표현
print(pi_1 %3.141592) # 'pi is 3.14'
print(pi_2 %3.141592) # 'pi is 3.1416' (3.1415가 아닌 이유는 소수점아래 5 번째 자리에서 반올림 되어서 그렇다.)
pi_3 = "pi is%10.2f" #10칸의 문자열에서 오른쪽 정렬하여 숫자를 소수점 아래 2 자리까지 표현
print(pi_3 %3.141592) # 'pi is 3.14' 10칸의 문자열에서 3,.,1,4 총 4개의 문자열이 오른쪽 정렬되어 왼쪽에 6칸의 공백 형성
#
6. 문자열 관련함수
py = "Python is funny"
1) 문자 갯수 세기
print(py.count('n'))
2) 위치 반환1
print(py.find('n')) # n이 처음 나온 index인 5 반환
print(py.find('z')) # 찾는 문자가 없으면 -1 반환
3) 위치 반환2
print(py.index('n')) # n이 처음 나온 index인 5 반환
#print(py.index('z')) # 찾는 문자가 없으면 오류 발생 ## 오류 때문에 뒤의 코드 실행 안되어 주석 처리
4) 문자열 삽입
a = py.join('123') # 각각의 문자열 사이에 py("Python is funny") 를 삽입
print(a) #'1Python is funny2Python is funny3'
5) 대문자로 변환
print(py.upper()) # 모든 문자를 대문자로 변환
6) 소문자로 변환
print(py.lower()) # 모든 문자를 소문자로 변환
py2 = " Python is funny "
7) 왼쪽 공백 삭제
print(py2.lstrip()) # 문자열 가장 왼쪽의 모든 공백 삭제
8) 오른쪽 공백 삭제
print(py2.rstrip()) # 문자열 가장 오른쪽의 모든 공백 삭제
9) 양쪽 공백 삭제
print(py2.strip()) # 문자열 가장 왼쪽, 오른쪽의 모든 공백 삭제
10) 문자열 바꾸기
print(py.replace("funny","GaeNoJam")) # ("바뀔 문자열", "대체할 문자열") 'funny'를 'GaeNoJam' 으로 변환
11) 문자열 나누기
print(py.split()) # 공백(space bar, tab, enter)을 기준으로 문자열을 나눈다. ['Python', 'is', 'funny']
print(py.split('is')) # 'is' 를 기준으로 문자열을 나눈다. ['Python ', ' funny'] Python 뒤 공백 1칸, funny 앞 공백 1칸은 물론 포함된다.
위와 같이 문자열을 나누면 각각의 요소가 리스트(list)로 들어가게 된다. 리스트는 다음 시간에 공부한다.
위에서 소개한 문자열 관련 함수들은 사용 빈도나 꽤나 높기때문에 숙지해두면 도움이 된다.
#
Bonus) 문자열 포맷 함수
man = "My name is {0} and age is {1}. I live in {2}"
문자열 포맷함수로 지정할 항목들을 {0}, {1}, {2}, … 와 같이 indexing 해준다.
print(man.format('John', 20, 'Seoul')) # .format() 함수를 사용하여 index 항목에 값 저장
name = 'John'
age = 20
home = 'Seoul'
print(man.format(name,age,home)) # 값을 직접 입력하는 대신 변수로도 대입이 가능하다.
print("hello, my name is {name} and age is {age} and I live in {home}".format(name = 'John', age=20, home= 'Seoul'))
{0}, {1}, … 형태의 index 대신 {name} 형태로 사용할 수도 있다. 이 경우에는 반드시 name=value 처럼 값을 지정해주어야한다.
print("{name:>10}".format(name = "John")) # :>10 은 문자열의 크기를 10으로 지정하고 오른쪽 정렬 시키라는 의미이다. 10칸의 {name}에 'John'이 오른쪽 정렬된다.
print("{name:^20}".format(name = "John")) # ^20은 문자열의 크기를 20으로 지정하고 가운데 정렬 시키라는 의미이다. 20칸의 {name}에 'John'이 가운데 정렬된다.
print("{name:=^20}".format(name= "John")) # =^20은 문자열의 크기를 20으로 지정하고 가운데 정렬 시키는데, 공백을 '='로 채운다.
print("{name:@^20}".format(name = "John")) # @^20은 문자열의 크기를 20으로 지정하고 가운데 정렬 시키는데, 공백을 '@'로 채운다.
정렬 시 공백을 지정한 문자로 채워주려면 정렬 문자인 <,>,^ 앞에 채워넣을 문자를 넣어주면 된다.
print("my age is {age:0.4f}".format(age = 3.141592)) # :0.4f는 age를 소수점 아래 4 자리까지만 지정한다.
print("{{hello}}".format()) # format 함수를 사용하면서 괄호 {, } 를 포매팅 문자가 아닌 문자 자체로 나타내고 싶은 경우 1개가 아닌 2개를 사용한다.
format 함수를 사용하면서 괄호 {, } 를 포매팅 문자가 아닌 문자 자체로 나타내고 싶은 경우 1개가 아닌 2개를 사용한다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
(Python) 5 - 자료형(5) -딕셔너리(Dictionary) (0) | 2020.05.16 |
---|---|
(Python) 4 - 자료형(4) - 튜플(Tuple) (0) | 2020.05.16 |
(Python) 3 - 자료형(3) - 리스트(List) (0) | 2020.05.16 |
(Python) 1 - 자료형(1) - 숫자형(Number) (0) | 2020.05.16 |
(Python) 0 - 파이썬(Python) 개요 (0) | 2020.05.16 |