본문 바로가기
Python

Python - 기초 자료형(문자형)

by DGK 2021. 10. 13.

 

인프런 파이썬 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

기초 자료형(문자형)

 

  • 기본 개념
# 문자열 선언 방식

str1 = "I am Python"
str2 = 'Python'
str3 = """How are you?"""
str4 = '''Thank you!'''


print(type(str1))   # 결과 : <class 'str'>
print(type(str2))   # 결과 : <class 'str'>
print(type(str3))   # 결과 : <class 'str'>
print(type(str4))   # 결과 : <class 'str'>


print(len(str1))    # 결과 : 11
print(len(str2))    # 결과 : 6
print(len(str3))    # 결과 : 12
print(len(str4))    # 결과 : 10

# len( )은 공백을 포함한 문자열의 길이를 알려주는 함수이다.




# 빈 문자열 선언 방식

str1_t1 = ''
str2_t2 = str()


print(type(str1_t1), len(str1_t1))  # 결과 : <class 'str'> 0
print(type(str2_t2), len(str2_t2))  # 결과 : <class 'str'> 0

 

 

  • 응용 개념
# 이스케이프 문자 사용 예시

"""
참고 : Escape 코드

\n : 개행
\t : 탭
\\ : 문자
\' : 문자
\" : 문자
\000 : 널 문자
...

"""


print("I'm Boy")

# 결과 : I'm Boy


print('I\'m Boy')

# 결과 : I'm Boy
# \뒤에 있는 특수기호(')는 일반 문자형으로 출력된다.


print('I\\m Boy')

# 결과 : I\m Boy
# 동일한 원리


print('a \t b')

# 결과 : a	b
# a와 b사이에 tab키를 누른 것과 같은 공간이 생긴다.


print('a \n b')

# 결과 : 
# a
# b
# a와 b사이에서 줄바꿈이 된다.


print('a \"\" b')

# 결과 : a "" b
# 앞선 예시와 동일한 원리



escape_str1 = "Do you have a \"retro games\"?"
escape_str2 = 'What\'s on TV?'


print(escape_str1)  # 결과 : Do you have a "retro games"?
print(escape_str2)  # 결과 : What's on TV?


t_s1 = "Click \t Start!"
print(t_s1)

# 결과 : Click    Start!


t_s2 = "New Line \n Check!"
print(t_s2)  

# 결과 : 
# New Line 
# Check!




# Row String 사용 예시

raw_s1 = r'D:\python\test'
print(raw_s1)

# 결과 : D:\python\test


raw_s2 = r'D:\tpython\test'
print(raw_s2)

# 결과 : D:\tpython\test

# Row String의 형식은 문자열을 감싸는 '' 앞에 r을 붙여준다.
# Row String을 사용하면 이스케이프 문자 기능이 적용되지 않고,
# 그대로 문자열로 출력된다.




# 멀티라인 입력 방법(변수를 멀티라인으로 선언하는 방법)

multi_str ="""
String
Multi line
Test
"""

print(multi_str) 

# 결과 :
# String
# Multi line
# Test



multi_str2 ='''
String
Multi line
Test
'''
print(multi_str2)

# 결과 :
# String
# Multi line
# Test

# """ """와 ''' ''' 모두 멀티라인 입력에 사용할 수 있다.



multi_str3 =\
"""
String
Multi line
Test
"""

print(multi_str3)

# 결과 :
# String
# Multi line
# Test

# 멀티라인 입력 시 """를 줄바꿈 하려면, = 뒤에 반드시 \를 쓰고 줄바꿈을 해야한다.



multi_str4 =\
'''
String
Multi line
Test
'''
print(multi_str4)

# 결과 :
# String
# Multi line
# Test




# 문자열의 연산(+, *)

str_o1 = "Python"
str_o2 = "Apple"
str_o3 = "How are you doing"
str_o4 = "Seoul Deajeon Busan Jinju"


print(str_o1 * 3)

# 결과 : PythonPythonPython
# 문자열에 곱하기 연산을 사용하면 해당 문자열을 반복한다.


print(str_o1 + str_o2)

# 결과 : PythonApple
# 문자열과 문자열의 합은 두 문자열을 합쳐준다.




# in 연산자

str_o1 = "Python"
str_o2 = "Apple"
str_o3 = "How are you doing"
str_o4 = "Seoul Deajeon Busan Jinju"


print('y' in str_o1)

# 결과 : True
# y 알파벳이 str_o1 변수 안에 존재하는지를 물어보는 의미이다.
# in 연산자는 특정 글자가 해당 문자열 안에 존재하는지를 알려주는 연산자이다.
# 만약, 존재한다면 True 값을 출력하고 존재하지 않으면 False 값을 출력한다.
# 아래의 결과는 동일한 원리가 적용된다.(단, 대소문자는 구별됨)
# 자료형 중에 시퀀스형은 모두 in 연산자를 사용할 수 있다.


print('n' in str_o1)        # 결과 : True
print('z' in str_o1)        # 결과 : False
print('P' not in str_o2)    # 결과 : True  (not in 연산자는 반대원리)




# 문자열 형 변환

print(str(66), type(str(66)))

# 결과 : 66 <class 'str'>
# 출력된 값은 숫자형 66처럼 보이지만, type함수의 결과 값은 문자형 66이다.(형 변환)


print(str(10.1), type(str(10.1)))

# 결과 : 10.1 <class 'str'>
# 위와 동일한 원리


print(str(True), type(str(True)))

# 결과 : True <class 'str'> 
# 위와 동일한 원리




# 문자열 함수(upper, isalnum, startswith, count, endswith, isalpha 등)

str_o1 = "Python"
str_o2 = "Apple"
str_o3 = "How are you doing"
str_o4 = "Seoul Deajeon Busan Jinju"


print("Capitalize: ", str_o1.capitalize())

# 결과 : Python
# Capitalize( ) 함수는 문자열의 첫 글자를 대문자로 바꿔준다.


print("endswith?: ", str_o2.endswith("o"))

# 결과 : False


print("endswith?: ", str_o2.endswith("e"))

# 결과 : True
# endswith( ) 함수는 해당 문자열의 마지막 글자가 무엇인지 확인해준다.
# 만약, 마지막 글자가 찾는 글자와 같으면 True 값을, 다르면 False 값을 출력한다.


print("replace", str_o1.replace("thon", 'Good'))

# 결과 : replace PyGood
# replace( ) 함수는 첫 번째 인자를 두 번째 인자로 바꿔준다.


print("sorted: ", sorted(str_o1))

# 결과 : sorted:  ['P', 'h', 'n', 'o', 't', 'y']
# sorted( ) 함수는 문자열을 받아서 정렬 기준에 맞게,
# 해당 문자열을 리스트 형태로 반환해준다.


print("split: ", str_o4.split(' '))

# 결과 : split:  ['Seoul', 'Deajeon', 'Busan', 'Jinju']
# split( ) 함수는 특정 기호(인자에 들어가는 값)를 기준으로,
# 해당 문자열을 리스트 형태로 분리해준다.




# 반복(시퀀스형)
im_str = "Good Boy!"

print(dir(im_str))   # 결과 :  __iter__ 등

for i in im_str:
    print(i)
    
# 문자형은 시퀀스형이기 때문에 print(i) 결과처럼
# 해당 문자열을 슬라이싱 처리(자르는 기능)하여 결과 값으로 나타낼 수 있다.




# 슬라이싱(문자열에서 원하는 글자만 잘라서 가져올 수 있는 기능)

str_s1 = "Nice Python"


print(len(str_s1))

# 결과 : 11
# 문자열의 인덱스 번호는 0부터 시작한다.


print(str_s1[0:3])

# 결과 : Nic
# str_s1[0:3]는 문자열의 인덱스 번호가 0인 글자부터,
# 인덱스 번호가 3인 글자의 바로 앞 글자까지 출력하겠다는 의미이다.
# 즉, 문자열의 인덱스 번호가 0,1,2인 글자만을 출력하겠다는 의미이다.


print(str_s1[5:11])

# 결과 : Python
# 위와 동일한 논리


print(str_s1[5:])

# 결과 : Python
# 두 번째 인덱스 번호를 생략하면, 문자열의 인덱스 번호가 5인 글자부터
# 문자열의 마지막 글자까지 모두 가져오겠다는 의미이다.(str_s1[5:11]과 동일 기능)


print(str_s1[:len(str_s1)])

# 결과 : Nice Python
# 첫 번째 인덱스 번호를 생략하면, 문자열의 첫 글자부터 가져오겠다는 의미이며
# 두 번째 인덱스 번호 대신 len(str_s1)를 쓴 것은 str_s1[:11]과 동일한 의미이다.
# 즉, len(str_s1) 값이 11이므로 문자열의 첫 글자부터 인덱스 번호가 10인 글자까지
# 모두 가져온다.

# 만약, 문자열의 마지막 인덱스 번호를 모르는 경우라면 str_s1[5:]와 같이 
# 문자열의 마지막 인덱스 번호를 생략하거나, 마지막 인덱스 번호 대신에 len(str_s1)를
# 사용하여 str_s1[:len(str_s1)와 같이 코드를 작성하면 된다.


print(str_s1[1:9:2])

# 결과 : iePt
# 문자열의 인덱스 번호가 1인 글자(i)부터, 인덱스 번호가 9인 글자의 바로 앞 글자(h)까지
# 가져오는 것을 의미하며 세 번째 숫자인 2는 글자를 한 칸씩 건너뛰어서 가져오라는 의미이다.


print(str_s1[-5:])

# 결과 : ython
# 만약, 인덱스 번호가 음수인 경우에는 문자열의 인덱스 번호 순서가 반대로 바뀌면서
# 문자열의 마지막 글자가 -1의 인덱스 번호를 부여받고, 뒤에서 앞으로 오면서 -2, -3으로
# 인덱스 번호를 할당 받는다.
# s1 문자열의 인덱스 번호가 -5인 글자는 y이므로, y부터 마지막 글자까지 모두 가져온다.


print(str_s1[1:-2])

# 결과 : ice Pyth
# 문자열의 인덱스 번호가 1인 글자는 i이고, -2인 글자는 o이지만
# 두 번째 인덱스 번호의 바로 앞 글자(h)까지 가져오는 것이므로 
# 결과 값은 i부터 h까지 출력되는 ice Pyth이 된다.


print(str_s1[::2])

# 결과 : Nc yhn
# 첫 번째, 두 번째 인덱스 번호를 모두 생략하면 처음부터 마지막 글자를 모두 가져오라는 
# 의미이지만, 마지막 숫자 2가 있기 때문에 첫 글자부터 마지막 글자까지 한 칸씩 건너뛰며
# 결과 값을 출력한다.(마지막 숫자가 3이라면, 두 칸씩 건너뛰며 글자를 가져옴)


print(str_s1[::-1])

# 결과 : nohtyP eciN
# 첫 번째, 두 번째 인덱스 번호를 모두 생략했기 때문에, 처음부터 마지막 글자를 모두
# 가져오는 것이지만 마지막 숫자가 -1이므로 해당 문자열의 글자를 반대 순서로 가져오게 된다.




# 아스키 코드(or 유니 코드)

a = 'z'

print(ord(a))

# 결과 : 122
# ord( ) 함수의 인자에 특정 문자를 넣으면
# 해당 문자의 아스키 코드가 결과 값으로 출력된다. 
# 여기서 122는 알파벳 z의 아스키 코드 값이고, 알파벳 z 대신 변수(a)를 넣은 것이다.


print(chr(122))

# 결과 : z
# 반대로 chr( ) 함수의 인자에 아스키 코드 값을 넣으면
# 아스키 코드 값에 대응되는 알파벳(문자)을 결과 값으로 출력한다.

# 컴퓨터는 문자를 처리할 때, 아스키 코드를 통해
# 해당 문자를 인식하고 처리한다.(파이썬의 내부적으로 작동하는 매커니즘)

'Python' 카테고리의 다른 글

Python - 기초 자료형(튜플)  (0) 2021.10.13
Python - 기초 자료형(리스트)  (0) 2021.10.13
Python - 기초 자료형(숫자형)  (0) 2021.10.11
Python - 변수  (0) 2021.10.11
Python - print 사용법  (0) 2021.10.08

댓글