# 문자열 데이터 타입
# - 타입 : 문자열
# - 클래스 : str
# - 순서 있는 데이터 타입
# - immutable 데이터 타입 : 미동의 데이터 타입
# 밑의 4가지 경우 모두 문자열 타입!
s1 = "abc"
s2 = 'abc'
s3 = '''abc'''
s4 = """ abc """
print(s1)
print(type(s1))
print(s2)
print(type(s2))
print(s3)
print(type(s3))
print(s4)
print(type(s4))
# 엔터를 문자열 중간에 치면 어떨까
# 1. 엔터를 무시한다
s1_space = "ab" \\
"c"
s2_space = 'ab' \\
'c'
# 엔터 중간에 쓰려면 '\\n'를 사용한다.
# s1_space = 'ab\\n' \\
# 'c'
# 2. 엔터를 받아들인다. 출력 결과물이 내가 기입한 대로 행동한다(띄어쓰기, 탭 등)
s3_space = '''a
bc'''
s4_space = """ a
bc """
print(s1_space)
print(s2_space)
print(s3_space)
print(s4_space)
# 문자열은 복합(시퀀스)데이터 타입이다
# 순서 있는 데이터 타입이다(index, slicing 사용)
# 배열 연산자를 사용할 수 있다 : +, *, %
# 문자열 객체의 멤버 함수를 사용할 수 있다.
# 배열은 수정 불가능한 Immutable 타입이다.
# 순서 있는 데이터 타입의 경우 indwx와 slicing을 사용할 수 있다.
# index
s1 = 'abcdefghi'
print(s1[0])
print(s1[1])
# index below 0 is possible.
print(s1[-1]) # == s1[8], i
print(s1[-2]) # == s1[7], f
# slicing : [시작:끝:증가치]
# 배열의 요소를 부분추출 시 사용한다
print(s1[0:4:1]) # abcd -> 0>= && <4, 1씩 증가하면 요소들에 접근
print(s1[1:4]) # bcd -> 증가치의 default값은 1이다.
print(s1[:5:2]) # ace -> 시작 index의 default는 0이다.
print(s1[1:]) # bcdefghi -> 끝 index의 default는 마지막 index이다
print(s1[-1:-4:-1]) # ihg -> minus index도 사용 가능하다.
# 배열과 연산자
# + : strcat
s1 = s1 + 'korea'
print(s1)
# * : 배열을 반복해준다
s1 = s1*2
print(s1)
# % : 정해진 타입의 데이터들을 가지고 문자열을 만든다
a = 10
b = 3.14
s = 'abc'
s2 = 'a=%10d b=%.2f c=%s'%(a, b, s) # C의 printf와 비슷하다
print(s2)
d = {'name': 'John', 'age': 20}
print( 'name: %(name)s, age: %(age)d'%d) # dictionary 자료형에도 쓸 수 있다.
# 문자열 객체의 멤버함수
# split() : " "를 기준으로 문자열을 나누기
s3 = "abcd efg"
s3 = s3.split()
print(s3)
# strip() : 문자열의 좌우에 있는 whitespace를 제거해준다
# whitespace : 공백, 개행\\n, 탭\\t
s4 = " abcd efg "
s4 = s4.strip()
print(s4)
# 배열은 수정할 수 없는 Immutable Data type이다.
s = 'abc'
print(s[0])
# s[0] = 'A' # 안 된다. 배열은 Immutable Type이기 때문이다.