본문 바로가기
python

파이썬 자료형 - (1) 문자열 String

by 햇농nongnong 2021. 10. 20.

(이 글은 '언어와정보처리' 과목에서 '파이썬 기초' 수업 내용을 정리한 글이다.)

 

pytorch 에 대해 들어가기 전, python 기초를 간단하게 리뷰하고 넘어가려한다.

 

먼저 코딩을 해야 하는 이유부터 생각해보자면, 

1. 다양한 분야로의 확장 적용

2. 이론 공부의 구체화

3. 연구 주제의 구체적 증명

이 가능해진다. 

- 코딩을 한다면, 본인의 분야에서 이론상의 공부로만 끝나는 것이 아니라 코딩을 통해 배웠던 것을 구체화시킬 수 있다.

- 연구자로서는, 연구주제가 결정되고 연구를 하게 되었을 때, 이론상/내 생각으로만 설명을 끝내는 것이 아니라 코딩, 즉 수치적으로 증명을 해내는 과정을 통해 내 생각이 맞다. 다르다. 를 객관적으로 증명할 수 있다. (연구쪽에서는 코딩을 이런식으로 사용)

- 인공지능이 생활 곳곳에 많이 적용되고 있기 때문에, 인공지능/코딩을 빼놓고는 다양한 것을 하기가 쉽지 않아졌다. 

 

코딩을 한다는 것 

- 무엇을 만들어볼까? (목적)

- 왜 만들어야 할까?  (목적)

- 비슷한 것이 있을까? (검색)

- 뭘까.. 뭘까.. 뭘까.. (끈기)

--> 코딩을 잘하고 싶다면, 일단 뭘 만들고 싶은데? 왜 만들고 싶은데? 라는 질문에 대답할 수 있어야 한다.

ex) 딥러닝을 이용한 음성인식 - 한국어 방언 중 이게 어떤 방언인지.. 

     - 무엇을 만들까? - 방언 분류기(방언을 분류하는 모델을 만든다) 

     - 왜 만들어야 할까? -  연구목적도 있지만, 실제 대검찰청에 보이스피싱 신원파악을 위해서 필요. 

     - 비슷한 것이 있을까? - 내 머릿속에서 나오는 것보다 더 좋은 것이 이미 있을 수 있기 때문에 검색

     - 뭘까..뭘까.. - 잘 안되었을 때 계속 뭘까 뭘까.. 고민

(막연히 코딩을 하는 것보다 이러한 목적이 있어야 한다.)

 

코딩할 때 필요한 것

1. 입력출력이 무엇인지 확인하기

2. 입력과 출력의 형태가 무엇인지 확인하기

-  숫자처럼 보이지만 문자 형태일수도.. 정말 숫자 형태일수도.. 형태를 확인

 

Python 프로그래밍 언어

- 1990년 귀도 반 로섬(Guido van Rossum)에 의해 탄생 (구글의 개발자)

- 생활 속 python

--> 컴퓨터 프로그래밍 교육, 기업의 실무(google 소프트웨어 50% 이상이 파이썬으로 구현, 인스타그램, dropbox)

- 인터프리터 언어

--> 크게 컴퓨터 언어는 인터프리터 언어, 컴파일러 언어로 나뉨

--> 인터프리터 언어는 한 줄 씩 코드를 해석해서 그 때마다 실행하여 결과를 확인,

      안맞는게 있으면 그 때 에러메세지 뱉어냄

--> 컴파일러 언어는 처음부터 끝까지 다 봐서 문법 체크하고,

      하나라도 틀리면 실행하지 않고 모든게 완벽하게 맞아야지 실행함. 

--> 불편하지 않나? 그래도 컴파일러 언어들(C, C++, Java..) 이 속도가 훨씬 빠름. 

 

Colab : Python 설치 없이 Python 프로그래밍 하기

- 구글에서 제공하는 Colaboratory

- 브라우저에서 python 을 작성하고 실행할 수 있음

- 장점 : 구성이 필요하지 않음(설치같은거 기본으로 되어있음), GPU 무료 액세스, 간편한 공유

--> 딥러닝은 엄청난 양의 데이터를 빨리 처리해야하는데, 그 때 연산에 특화되어있는 GPU 사용

--> 노트라는 개념으로 간편하게 공유가능

 

자료형

- 숫자 (Numbers) : 정수형(Integers)(int), 실수형(부동소수점)(Floating-points)(float)

- 문자열 (Strings) : "" 와 ''를 사용

- 리스트 (Lists)

- 튜플 (Tuples)

- 딕셔너리 (Dictionaries)

- 집합 (Sets)

- 불 (Boolean)

 

문자열 (Strings) 

- I'm hungry 처럼 문자열에 ' 가 포함되는 경우, ""를 사용.

- 줄바꿈 문자 \n (new line) : 줄바꿈 문자를 사용하여 입력할 때는 같은 줄이더라도 출력은 \n을 기준으로 줄이 바뀌어 출력됨. 

- 줄바꿈 문자와 같이 문자 그대로 출력되지 않고 특수한 기능을 가지는 문자들을 'Escape Codes' 라고 함.

 

* 문자열 내 문자 바꾸기 

- 문자열 데이터를 변수처럼 취급하여 새로 저장하는 (assign) 방법 통하지 않음

a = "My lyfe is awesome!"
a[4] = "i"

이 경우 변경되지 않고 에러뜸

 

방법1 : 바꿀 문자 (y) 를 기준으로 앞뒤를 substring으로 만든 후 새로 변경할 문자 (i) 와 합치기

new_a = a[:4] + "i" + a[5:]

방법2 : replace() 메소드를 사용하여 y를 i로 바꾸기

- replace 사용법 : (문자열).replace(변경할 substring, 새로 바꿀 substring)

new_a = a.replace("lyfe", "life")

 

 

* 문자열 나누기(split)

- split() 사용법 : (문자열).split(분절 기준) - 분절 기준이 없을 경우 스페이스를 기준으로 분절

- 결과 : 분절된 substring들은 리스트(List) 형태로 출력됨

a = "My life is awesome!"
split_a = a.split()
print(split_a)

결과 : ['My', 'life', 'is', 'awesome!']

 

ex) 문자 e 를 기준으로 분절

- 분절 기준인 e 는 결과에 포함되지 않음

split_a = a.split('e')
print(split_a)

  결과 : ['My lif', ' is aw', 'som', '!']

 

* 문자열 포맷팅(formatting)

- 사전에 정의된 변수를 문자열의 일부로 사용

- 기존 방법 : 문자열과 변수를 단순하게 합쳐 보기

--> 문자열과 숫자는 붙여서 사용할 수 없음 --> 숫자를 문자형으로 바꾸어야 함.

num_of_apples = 3
string = "I have " + num_of_apples + " apples."

--> 에러 : 3은 숫자형이고 나머지는 문자형이기 때문에, 서로 다른 자료형 합칠 수 없음

 

- 기존 방법으로 해결 : 숫자를 str() 을 사용하여 문자형으로 바꾼 후 합치기

--> 띄어쓰기 등을 생각하여 str() 의 앞뒤를 고려해야해서 조금은 불편함.

string = "I have " + str(num_of_apples) + " apples."
print(string)

결과 : I have 3 apples.

 

- 문자열 포맷팅으로 해결하기 

1) 포맷팅 방법 1 : 특수문자 (%d, %f, %s) 를 사용하여 표현하기

- 정수형은 %d (digit), 실수형은 %f (float), 문자형은 %s (string) 사용

- %f 의 경우, %와 f 사이에 .(숫자)를 추가하면 소수점 (숫자)째 자리까지만 반올림하여 출력됨.

 

ex) string = "I have %d apples." % num_of_apples

string = "I have %d apples." % num_of_apples

결과 : I have 3 apples.

 

ex) string = "The %s score is %.2f." % (score_type, average_score)

 

score_type = "average"
average_score = 12.3456
string = "The %s score is %.2f." % (score_type, average_score)
print(string)

결과 : The average score is 12.35.

 

2) 포맷팅 방법 2 : format()를 사용하여 표현하기

- %d, %f, %s 대신 입력할 정보를 {} 로 대신 표현하고, {문자열}.format(입력정보)로 문자열 표현

- 장점 : 데이터 종류에 상관없이 {} 로 통일하여 나타낼 수 있음.

- 실수형 입력의 경우, {} 안에 :.(숫자)f 를 추가하면, 소수점 (숫자)째 자리까지 반올림하여 출력

 

ex) string = "I have {} apples.".format(num_of_apples)

string = "I have {} apples.".format(num_of_apples)

결과 : I have 3 apples.

 

ex) string = "The {} score is {:.2f}.".format(score_type, average_score)

score_type = "average"
average_score = 12.3456
string = "The {} score is {:.2f}.".format(score_type, average_score)

결과 : The average score is 12.35.

 

* 문자열 예제 문제

name = "Dave", age = 12, rate1 = 3.13, rate2 = 5.05 일 때, 

"Hi. My name is Dave. I am 12 years old.

My total rate is 8.2." (반올림하여 소수점 첫째 자리까지만 출력) 를 출력해보기

ex) string = "Hi. My name is %s. I am %d years old.\nMy total rate is %.1f." % (name, age, rate1+rate2)

string = "Hi. My name is %s. I am %d years old.\nMy total rate is %.1f." % (name, age, rate1+rate2)

ex) string = "Hi. My name is {}. I am {} years old.\nMy total rate is {:.1f}.".format(name, age, rate1+rate2)

string = "Hi. My name is {}. I am {} years old.\nMy total rate is {:.1f}.".format(name, age, rate1+rate2)

 

댓글