본문 바로가기
프로그래밍/파이썬 문법

호기심 파이썬(자료형 : 문자열)

by 인성패밀리 2022. 4. 10.
반응형

오늘은 자료형 중에서 문자열에 대해서 알아보겠습니다.

 

문자열 자료형은 문자를 처리하기 위해서 존재합니다.

 

문자열은 '(따옴표)나 "(쌍 따옴표)로 감싸서 만들게 되는데 이때 "(쌍 따옴표)로 시작하면 반드시 반대편도 "(쌍 따옴표)로 감싸야합니다.

 

즉, '문자' 나 "data" 이러한 형식을 유지해야한다는 말입니다. 절때 'abcd" 이러한 형태는 안됩니다.

 

그렇다면 문자열의 사용예시를 보겠습니다.

이 코드의 결과는?

지금 print 함수 안에 자료형을 보면 다음과 같습니다.

print(문자열, 정수, 문자열)

 

이전 포스팅에서 print 함수는 자료형을 출력해주는 함수라서 자료형 중 하나인 문자열도 당연히 출력이 가능합니다.

위와 같이 문자가 필요한 부분에 언제든 사용이 가능합니다.

 

이제 정수와 실수, 문자열 각 자료형이 구분할 수 있겠나요? 그렇다면 "1234" 와 1234는 같은 자료형일까요?

 

??? : 같은 숫자로 구성되어있는데 같은 것 아니냐

라고 하실 수도 있지만 전혀 그렇지 않습니다. 서로 다른 자료형입니다.

 

문자열 1234와 정수 1234는 서로 다른 자료형이기 때문에 상호 연산이 불가능합니다.

이 코드의 결과는?
TypeError 발생

짧은 영어 실력으로 번역해보면 에러의 제목은 TypeError이고 str(문자열, string의 str을 따온 것)은 str만 연결이 가능하다라고 되어있습니다. 왜 TypeError가 발생했냐면 + 연산을 할 때 자료의 형태가 서로 맞지 않다는 것입니다.

 

그렇다면 str끼리 즉, 문자열끼리 더하는 것은 가능한 것일까요? 가능합니다.

이 코드의 결과는?
이때 주의사항이 있습니다.

가능하기는 한데 이때 주의할 점은 서로 붙어있다는 점입니다.

비슷한 두 코드의 결과는?
띄어쓰기의 유무를 잘 비교하자

print 함수에서 ,(콤마)를 사용하면 무조건 한 칸 띄어쓰기가 되고, 문자열 연산을 통한 결과는 문자열이 서로 붙어있게 됩니다.

 

만약에 띄어쓰기가 좀 안 맞아도 불편함이 없으시다면 마음가는대로 사용하시면 됩니다.

 

그렇다면 이제 문자열끼리 더할 수 있다는 점은 알았으니까 그러면 다른 연산자도 가능하지 않을까 하는 의문이 생길 수도 있습니다. 나머지 남은 연산자인 빼기, 곱하기, 나누기 연산자의 양 쪽 피연산자 부분에 문자열을 넣어보면 다 안됩니다. 

 

근데 되는게 하나 있습니다. 바로 문자열 * 정수의 형태입니다.

이 코드의 결과는?
저기 #은 주석이라고 해서 저 줄은 실행하지 않습니다.

문자열 * 정수의 형태는 티비에서도 많이 보았었습니다. 옛날에 무한도전 보면 해골 x 100 이런 것 보신 적 있지 않으신가요? 이러한 개념과 똑같습니다.

 

그렇다면 문자열 * 정수 이러한 형태만 가능할까요? 네 그렇습니다. (아 그리고 덧셈과 곱셈은 교환법칙이 성립하는 것은 이미 수학시간에 배운 것이라 여기서도 똑같이 생각하면 됩니다.)

 

문자열 + 문자열, 문자열 * 정수 => 이러한 것을 가지고 문자열 연산이라고 합니다. 연산자를 사용했으니까요

 

 

이제 그렇다면 대략적으로 문자열에 대해서 어느 정도 감이 잡혔으니

조금 더 깊게 들어가보도록 하겠습니다.

 

문자열은 다음의 형태를 가질 수 있습니다.

""  => 빈 문자열

"a" => 문자가 한 개인 문자열

"1q2w 3e4r" => 문자가 여러 개인 문자열

 

문자의 종류에는 다양한 것이 있지만 공백(띄어쓰기)도 문자의 한 종류에 포함됩니다.

 

문자열을 조작하는 방법에 대해서 알아보겠습니다. 문자열을 조작한다는 것은 다음에 해당 됩니다.

ⓐ 문자열 연산

ⓑ 문자열 한 개에 접근

ⓒ 문자열 여러 개에 접근

 

ⓐ에 대해서는 위에서 설명을 하였습니다. 문자열 한 개에 접근한다는 것은 만약 문자열 "안녕하세요" 가 있을 때 "안"이라는 문자에 접근하는 것을 말합니다

 

문자열에 접근하려면 인덱스(index)라는 개념을 이해해야합니다. 아래의 표를 보겠습니다.

음수 -5 -4 -3 -2 -1  
" "
양수 0 1 2 3 4  

사전에도 인덱스라는 표현이 있는데 동일한 개념입니다. 컴퓨터에서는 대부분 숫자를 시작할 때 0부터 시작한다는 점을 기억해두시면 좋을 것 같습니다.

 

인덱스는 단순하게 위치만 가리키는 것이라는 점을 명심하시길 바랍니다.

 

"안" 이라는 문자열에 접근하려면 해당 위치를 가리키는 인덱스 번호인 0번을 사용해야 접근이 가능합니다. 물론 -5도 "안"을 가리키고 있습니다. 문자열 한 개에 접근하는 문법은 예제를 통해서 알아보겠습니다.

이 코드를 실행하면?
실행 결과

현재 형식이 변수[인덱스 번호] => 이렇게 나와있는데 꼭 변수를 사용해야하느냐 그것은 아닙니다. a자리에 반드시 문자열이 담겨있는 변수나 문자열이 와야합니다.

 

저기의 인덱스 번호에 0 말고 다른 자리에 해당하는 인덱스 번호도 꼭 넣어보시길 바랍니다.

 

저렇게 문자열에 접근했다면 다른 변수에 저장하거나 접근한 것을 가지고 출력을 하거나 용도에 맞게 알아서 사용하면 됩니다.

 

이번에는 여러 개의 문자열에 접근하는 슬라이싱에 대해서 알아보겠습니다.

 

hangul = "사람마다 하여금 쉬이 익혀 날마다 씀에 편안케 하고자 할 따름이니라"

이러한 문자열이 변수 hangul에 저장되어 있다고 해보자

여기서 하여금을 출력하고 싶다면? 현재까지 배운 방법으로 표현하면

hangul[5]+hangul[6]+hangul[7]이런 방법이 있을 것입니다.

 

이럴 때는 다음과 같이 편하게 슬라이싱 하여 사용하자

이 코드를 실행하면?
원하는 부분만 나왔다.

슬라이싱의 형식은 문자열[시작 인덱스: 끝 인덱스 +1] 이다. 문자열 "하"의 인덱스 번호가 5이고, 문자열 "금"의 인덱스 번호가 7이므로 여기에 +1을 한 8이 되는 것입니다.

 

str1 = "안녕하세요"

여기에서 "하세요" 만 슬라이싱 하고 싶다면

문자열 "하"의 인덱스 번호 2와 문자열 "요"의 인덱스 번호가 4이므로 문자열 "하세요" 를 슬라이싱 하고 싶으면

str1[2: 5] 입니다. 5라는 인덱스는 없긴한데 사실 str1[2: 100] 해도 똑같은 결과가 나온게 됩니다. 이는 배열에 대해서 학습해야하므로 그냥 이해하고 넘어가면 됩니다.

 

접근하는 방법에서 인덱스는 단순하게 위치만 가리키는 것이다 라고 했는데 이게 도데체가 무슨 말이냐 하면 아래의 코드를 보고 예상을 해봅시다.

 

test = "abcd1234"

print(test[-8: 4])

 

이 코드를 보면 -8부터 -7, -6, -5, ..., 2, 3 까지 나오는 것이 아닙니다. 단순히 위치를 가리키는 것이기 때문에 -8과 4는 시작 문자열이 "a", 끝 문자열이 "d"라는 것일 뿐 절때 범위로 이해하여서는 안됩니다. 저 코드의 결과는 abcd입니다.

 

슬라이싱 문법은 문자열[시작 인덱스: 끝 인덱스 +1] => 이것으로 정리할 수 있지만 간편한 기능 두 개를 소개해 드리겠습니다.

 

문자열[  : 끝 문자열 + 1]  ==> 이것은 문자열의 맨 처음부터 끝 문자열까지 라는 의미입니다.

문자열[시작 문자열:   ]  => 이것은 시작 문자열 부터 맨 끝의 문자열까지 라는 의미입니다.

 

 

위의 내용을 간략히 요약하면 아래와 같습니다.

 

문자열 만드는 방법 '나 "로 감싼다.

"1234"와 1234는 다르다

"" => 빈 문자열

"a" => 문자가 한 개인 문자열

"1q2w3e4r" => 문자가 여러 개인 문자열

문자열 + 문자열 => 가능

문자열 * 정수 => 가능

접근하는 방법 : 문자열[해당 인덱스 번호]

슬라이싱하는 방법 : 문자열[시작 인덱스 번호: 끝 인덱스 번호 + 1]

                          문자열[  : 끝 문자열 + 1]

                          문자열[시작 문자열:   ]

반응형

댓글