본문 바로가기

Python

Chapter 2 : Python_String (slicing, string functions, string format)


안녕하세요! 오늘 기록할 내용은 문자열 입니다!
제가 블로그 작성을 위해서 필요한 내용들도 많이 찾아보고 그랬는데요
제가 1장에서 포스팅할때는 코드 예시 같은거를 다 사진으로 찍어서 올렸는데..
알고보니 Tstory에 코드블럭 기능이 있더라구요?..ㅎㅎ
오늘은 좀더 편하고 보기 싶게 작성할 수 있겠네요,,

파이썬에서 문자열을 나타낼 때에는 작은따옴표(‘)와 큰 따옴표(“)를 사용하는데요
두 따옴표의 기능적 차이는 없다고 하지만 근무환경이나, 개발자에 따라
규칙을 정해놓고 사용하는 것 같습니다.

Sleep_soo = “코딩을 공부하고 싶습니다.”
print(Sleep_soo)


이렇게 변수에 문자열을 저장하고 해당 변수를 print하면
코딩을 공부하고 싶습니다. 라는 문장이 출력됩니다.
위에서 작은 따옴표와 큰따옴표의 기능적 차이는 없다고 하였는데
아래와 같이 사용하면 작은 따옴표와 큰 따옴표를 둘 다 사용하게 됩니다.

Soo = "나는 ‘작은따옴표’ 라는 단어를 출력하고 싶습니다.”
print(Soo)


Soo 라는 변수에 저장한 문자열을 보면 작은 따옴표가 포함되어있는데요,
이렇게 작은 따옴표 자체를 출력하고 싶을 때에는 큰 따옴표 안에 작성을 하면 되는 것입니다.
위의 코드를 실행시키면
나는 ‘작은따옴표’ 라는 단어를 출력시키고 싶습니다. 라는 문장이 출력된답니다.

Soo = '저는 “큰따옴표”를 출력하고 싶습니다.‘
prtin(Soo)


이번엔 반대로 작은 따옴표 사이에 큰따옴표를 넣어서 큰따옴표 자체를 출력시켰습니다!
위의 코드는 저는 “큰따옴표”를 출력하고 싶습니다. 라는 문장이 출력되겠네요 ㅎㅎ


문자열 슬라이싱


이번엔 슬라이싱입니다.
문자열 각 글자마다 순번이 정해져 있는데요 이 파이썬에서는 순서를 0 부터라고 생각하면 됩니다!
“전화번호” 라는 문자열을 저장했다면 4글자이지만 첫
글자의 순서는 0번이므로 0, 1, 2, 3 번째 자리 까지만 존재하는것죠

SN = "010-****-####"
print("맨 앞은 당연히“ + SN[0:2])
print("가운데 네자리는” + SN[4:7])
print("마지막 네자리는“ + SN[9:12])


SN이라는 변수에 누군가의 전화번호를 저장했다고 생각해봅시다.
헷갈리시면 안되는게 -까지 한 글자로 생각하셔야합니다!
가끔 전화번호 형태만 보고 010 **** #### 이렇게 총 11글자로 착각을 하더라구요
(제가 그랬습니다..ㅎㅎ)
슬라이싱은 말그대로 문자열을 슬라이스한다고 생각하시면 됩니다.
위의 예제 코드를 보시면 SN[0:3]이런 형태가 보이시죠?
SN에 저장된 문자열의 0번째부터 2번째 자리까지 라는 뜻입니다.(010이 출력)
0번째부터 라는건 생략이 가능해서 SN[:3]라고만 써도 가능합니다
SN[4:7]은 4번째부터 7번째 자리,(****이 출력)
SN[9:12]는 9번째부터 12번째 자리라는 뜻인데(####이 출력)
12번째 자리는 마지막 자리라서 생략이 가능하므로
SN[9:] 이렇게 작성해도 가능합니다 ㅎ

추가로, 순서를 뒤에서 부터 세는 방법도 있는데요,
그럴때는 마이너스 부호를 써줍니다.

SN = "010-****-####"
print("마지막 네자리는 “ + SN[-1:-4])
print("가운데 네자리는 ” + SN[-6:-9])
print("처음 세자리는 “ + SN[-11:-13])


주의할 점은 앞에서부터는 0번째부터인데,
뒤에서부터 셀 때는 -1부터라는 것입니다!
SN[-1:-4]는 ####, SN[-6:-9]는 ****, SN[-11:-13]은 010이 되는거죠


문자열 처리함수


다음으로는 문자열 처리함수에 뭐가 있는지 알아보겠습니다.

EX = "MY NAME IS SLEEP_SOO."
ex = "my name is sleep_soo."
print(EX.lower())
print(ex.upper())
print(len(EX))
print(ex.replace("MY", "YOUR"))
print(EX.count("M"))


변수.lower() : 변수에 저장된 문자열을 모두 소문자로 변환합니다.
변수.upper() : 변수에 저장된 문자열을 모두 대문자로 변환합니다.
len(변수) : 변수에 저장된 문자열의 길이를 세줍니다.
변수.replace("삭제할 문자“, ”추가할 문자“) : 변수에 저장된 문자열 내에서 특정 문자를 다른 문자로 대체합니다.
변수.count("세고싶은 문자“) : 변수에 저장된 문자열 내에서 특정 단어가 몇번 들어가는지 세줍니다.
위 예제코드의 print문을 순서대로 출력하면

my name is sleep_soo.
MY NAME IS SLEEP_SOO.
20
YOUR NAME IS SLEEP_SOO.
2
이렇게 출력이 될텐데요, len()이나 count()등
문자열내의 공백과 점(.)도 포함시켜야 하는 함수는 주의해야합니다.


문자열 포맷
방법1
print("나는 %d살입니다." % 25)  # d는 정수를 의미
print("제 이름은 %s입니다." % "sleep_soo")  # s는 문자열을 의미
print("제가 제일 좋아하는 알파벳은 %c입니다." % 'S')  # c는 문자(한 글자)를 의미
print("나의 키는 %scm이고 %s는 185cm입니다." % (181, "팔길이"))


똑같은 문장 포맷에서 사람 마다 다르게 작성할 부분은
%d, %s, %c 등을 사용해서 문장 완성의 효율을 높일 수 있습니다.
예를 들어 설명하자면
”나는 24살이다.“
”나는 25살이다.“
두 문장은 숫자만 조금 다를뿐 똑같은 포맷의 문장을 사용하기 때문에
”나는 %d살이다.“
이렇게 나이가 들어가 저 숫자부분만 비워놓고
그떄그때 다르게 출력할 수 있도록 하는 것입니다.
위의 예제 코드를 참고해주세요
위의 프린트문들은 아래와 같이 출력됩니다.

나는 25살입니다.
제 이름은 sleep_soo입니다.
제가 제일 좋아하는 알파벳은 S입니다.
나의 키는 181cm이고 팔길이는 185cm입니다.

4번째 프린트 문을 보면  %s인데도 181이라는 숫자를 적었는데요,
%s는 모두 문자열로 인식하기 때문에 숫자를 적어도, 문자를 적어도 가능하답니다.

방법2
print("나는 {}살입니다.".format(25))
print("나의 키는 {}cm이고 {}는 185cm입니다.".format(181, "팔길이"))
print("나의 키는 {0}cm이고 {1}는 185cm입니다.".format(181, "팔길이"))
print("나의 키는 {1}cm이고 {0}는 185cm입니다.".format(181, "팔길이"))


개인적으로 저는 이 방법이 마음에 들어서 자주 쓰고자 합니다 ㅎㅎ
위 프린트문을 출력하면 아래와 같습니다.
나는 25살입니다.
나의 키는 181cm이고 팔길이는 185cm입니다.
나의 키는 181cm이고 팔길이는 185cm입니다.
나의 키는 팔길이cm이고 181는 185cm입니다.
그런데 4번째 출력문은 말이 이상하죠?
format() 안에 순서를 잘못 적거나 문자열 내 중괄호의 순서를 잘못 적용시킨 경우입니다.
중괄호의 순서는 0부터 작성하며 format() 안에 채워 넣은
문자열은 앞에서부터 0번, 1번, .... 순서대로 매치되어 완성되는 것입니다.

방법3
print("나는 {height}cm이며, {food}을 좋아해요.".format(height=181,food="치킨"))
print("나는 {height}cm이며, {food}색을 좋아해요.".format(food="치킨", height=181))

방법4
age = 20
color = "빨간"
print(f"나는 {age}살이며, {color}색을 좋아해요.")  # print문 내에서 f로 시작하는것 중요


위와 같은 방법으로도 작성할 수 있는데 방법 3을 보면
각각 height = 181, food = 치킨이라고 명시를 했기 떄문에
순서가 상관이 없어지게 되네요!



지금까지 문자열과 관련해서 공부한 내용을 기록해 보았습니다.
오늘의 포스팅은 여기까지 하도록 하고
다음 공부도 공유하도록 할게요~!!

출처 : https://youtu.be/kWiCuklohdY
해당 포스팅에 등장하는 예제코드는 위 영상에 등장한 것이며
연습을 위해 일부 수정하였습니다.