innn

파이썬 자료형 - 문자열 본문

코딩 테스트/코테를 위한 파이썬 기초 문법

파이썬 자료형 - 문자열

33삼 2022. 9. 29. 12:35

프로그램이 처리할 수 있는 모든 것 자료(data) 

자바와 거의 동일할테니 빠르게 익히고 알고리즘 풀어야한다 ;; 

 

자료형과 기본 자료형

기능과 역할에 따라 자료를 구분하는데, 구분된 종류를 자료형 data type 이라고 부른다.

가장 기본적인 자료형은 문자열, 숫자, 불이 있다. (자바와 다른게 있다면 자바는 프리미티브 (기본)와 레퍼런스 (참조)에서 서 8가지 프리미티브에 숫자와 불리언이 있고 레퍼런스에 스트링이 있는데 파이썬은 그냥 다 기본 자료형인가보다. 뒤에서 만약 파이썬도 구분한다면 추후 수정하겠다.)

 

  • 문자열 string : 메일 제목, 메시지 내용 등 ex. "안녕하세요", "Hello World"
  • 숫자 number : 가격, 성적 등 ex. 52, 273
  • 불 boolean : 친구의 로그인 상태 등 ex. True, False

이러한 기본 자료형을 조합해서 새로운 자료형을 만들 수도 있다. 가령 숫자 3개 조합하면 '2022.09.29'처럼 날짜를 표현하는 자료형이 만들어진다. 

 

자료형 확인하기

자료형data type 이란 자료의 형식이다. 파이썬에선 자료의 형식을 확인할 때 type() 함수를 사용한다. print() 함수와 마찬가지로 식별자 뒤에 괄호가 있으므로 함수다. 함수의 괄호 내부에 자료를 넣으면 그 자료가 어떤 자료형인지 확인할 수 있다. 

print(type("안녕하세요"))

 

이를 출력하면, 아래와 같이 스트링이라는 것을 알 수 있다. 

터미널 창

 

문자열 만들기

print() 함수를 배우면서 "Hello Python .. !" 등 글자를 화면에 출력해보았다. 

따옴표로 감싸 입력한 모든 것을 문자열string이라고 생각하면 된다. (자바와 동일)

"Hello"

'String'

'안녕하세요'

 

큰따옴표로 문자열 만들기

문자열은 문자들을 큰따옴표(")로 감싸서 만든다. 

print("String")
 

작은따옴표로 문자열 만들기

작은따옴표(')로도 문자열을 만들 수 있다.

print('String')

실행 결과를 보면 큰따옴표나 작은따옴표나 마찬가지의 결과가 출력된다.

 

문자열 내부에 따옴표 넣기

(백준 10172 개를 풀 때 사용한 내용이다)

2022.09.29 - [2022.09.28 ~ 2022.03.17/파이썬_알고리즘] - 백준 10172 개

 

앞에서 문자열을 만드는 두 가지 방법을 배웠다. 큰따옴표와 작은 따옴표. 왜 두 가지 방법이나 지원하는 것이며 또 어떤 것을 사용해야할까?

 

예를 들어 다음과 같이 큰따옴표를 포함한 문자열을 만든다고 가정해보자

"안녕하세요"라고 말했습니다.

앞서 배운 방법대로 큰따옴표를 사용해 문자열을 만든다면 다음과 같이 만들 것이다 .

>>> print(""안녕하세요"라고 말했습니다.")

하지만 이 상태로 출력한다면 신택스 에러가 뜬다. 

 

comma 잊었녜 친절하다~

 

파이썬 프로그래밍에선 ""안녕하세요"라고 말했습니다" 라는 문자열을 다음과 같이 인식한다.

1 은 아무 글자도 없는 문자열. (" ") 2는 "라고 말했습니다" 라는 문자열.

 

파이썬은 자료(문자열)와 자료(문자열)를 단순하게 나열할 수 없다. 그래서 구문 오류Syntax Error가 발생하는 것이다.

 

그러면 큰따옴표를 문자열 내부에 넣고 싶으면?? 

= 작은따옴표로 문자열을 만들면된다. 

print('"안녕하세요"라고 말했습니다')

 

반대로 문자열 내부에 작은 따옴표를 넣고 싶으면??

= 큰따옴표로 문자열을 만들면 된다. 

print("'배가 고프다' 라고 생각했다")
 

 

>> 결론 : 문자열 내부에 큰따옴표 넣고 싶으면 감싸는 건 작은따옴표로. 작은따옴표를 넣고 싶으면 감싸는건 큰따옴표로.

 

이스케이프 문자를 사용해 문자열 만들기 

(이 역시 동일하게 백준 10172 문제를 풀 때 활용 개념이다)

 

 한 방법으로만 사용해서 문자열을 만들고 싶다? 그렇다면 이스케이프 문자를 사용하면 된다. 

이스케이프 문자escape character는 역슬래시(\) 기호와 함께 조합해서 사용하는 특수한 문자를 의미한다. 참고로 한국어 키보드에서 \는 원화 기호(₩)이다.

 

아래와 같이 \와 함께 큰따옴표, 작은따옴표를 사용하면 이를 '문자열을 만드는 기호'가 아니라 '단순 따옴표'로 인식한다. 

  • \" : 큰따옴표"로 인식해서 그대로 출력
  • \' : 작은따옴표'로 인식해서 그대로 출력

그렇기 때문에 이스케이프 문자를 사용하면 다음과 같이 큰따옴표 내부에 큰따옴표를 넣고, 작은따옴표 내부에 작은따옴표를 넣을 수 있다. 이전의 실행 결과와 동일하게 출력되는 것을 보자.

print("\"안녕하세요\"라고 말했습니다")

print('\'배가 고프다\' 라고 생각했다')

이외에도 다양한 이스케이프 문자가 있다.

  • \n : 줄바꿈 의미
  • \t : 탭을 의미 
print("안녕하세요\n안녕하세요")
 

 

여러 줄 문자열 만들기 

이스케이프 문자 중에 \n 사용하면 줄바꿈이 가능하다. 

 

 

그런데 위와 같이 한 줄에 긴 코드를 입력하면 읽기 힘들고 한 줄에 줄바꿈 문자도 많아 어떤 부분에서 줄바꿈이 일어나는지 확인하려면 번거롭게 \n을 하나하나 찾아보면서 확인해야 한다. 

 

그래서 파이썬은 여러 문자열 이라는 기능을 지원한다. 여러 문자열은 큰따옴표 또는 작은따옴표를 세 번(""" or ''') 반복한 기호를 사용한다. 

 

큰따옴표와 작은따옴표를 세 번 입력한 후 문자열을 입력하면 Enter를 누르는 곳마다 줄바꿈이 일어난다. 

코드를 훨씬 쉽게 읽을 수 있다. 

 

이를 이용해서라면 위에서 풀었던 백준 10172번 개 문제도 print() 를 한 번만 사용해서 풀 수 있지 않을까?

 

(왼) 2번, 5번 줄에 \ 이스케이프 문자를 사용함 (오) 결과 

 

잘 출력되었다. 

 

줄바꿈 없이 문자열 만들기

여러 줄 문자열을 입력한 후 코드를 조금 더 쉽게 보려고 아래와 같이 """ 다음에 작성하는 경우도 있다. 하지만 이렇게 코드를 작성하게 되면 의도하지 않은 줄바꿈이 들어가게 된다. 

 

만약 의도하지 않은 줄바꿈이 들어가지 않게 하려면 다음과 같이 \기호를 사용한다. 파이썬에서는 '코드를 쉽게 보려고 줄바꿈한 것이지 실질적으인 줄바꿈이 아니다'라는 것을 나타낼 때, 줄 뒤에 \ 기호를 사용한다. 

 

>> \ 기호는 여러 줄 문자열 을 사용할 뿐만 아니라 다양한 상황에 활용되는 기호이므로 기억해야한다. 

 

문자열 연산자

상식적으로 아는 것을 다 적용해서 생각할 수 있다. 이러한 연산자는 특정한 자료의 형태에 종속되는데, 가령 '숫자'라는 자료에는 더하기, 빼기, 곱하기, 나누기 연산자를 적용할 수 있지만, 합집합 교집합 차집합이라는 연산자는 적용할 수 없다는 것. 즉, 각각의 자료는 사용할 수 있는 연산자가 정해져 있다.   

 

 

숫자에는 숫자에만 적용할 수 있는 연산자가 있고, 문자열에는 문자열에만 적용할 수 있는 연산자가 있다.

 

문자열 연결 연산자: +

자바와 동일하다. ,와 다른 점이 있다면 자바처럼 띄어쓰기를 포함하지 않고 그대로 출력된다는 점이다. 

"문자열" + "문자열"

 

** 일부 프로그래밍 언어(PHP)는 숫자 더하기 연산자와 문자열 연결 연산자의 모양이 같아 헷갈린다고 하여 문자열 연결 연산자를 마침표(.)로 사용하기도 한다. 

 

이번에는 "안녕하세요1"을 출력하려는 의도로 다음과 같이 문자열과 숫자 사이에 문자열 연결 연산자를 사용해보자.

당연히 에러가 뜬다. 

 

따라서 문자열은 무조건 문자열끼리 + 연산자를 사용해서 연결해야 하고, 숫자라 하더라도 문자열과 함께 + 하려면 큰따옴표를 붙여 문자열로 인식시켜야만 오류 없이 결과를 얻을 수 있다. 그리고 숫자를 더할 때는 숫자와 숫자 사이에 + 를 사용해서 연산하면 된다. 

 

문자열 반복 연산자: *

문자열을 숫자와 * 연산자로 연결하면 문자열을 반복할 수 있다. 연산자 순서는 상관없다. 

 

문자 선택 연산자(인덱싱): []

문자 선택 연산자는 문자열 내부의 문자 하나를 선택하는 연산자이다. 대괄호[] 안에 선택할 문자의 위치를 지정하며, 이 숫자를 인덱스index라고 부른다. 그러니까 문자열을 하나의 배열로 보고 한글자씩 0부터 배열처럼 집어넣어져 있는 형태를 의미하기 위해서 쓰는 듯. 

파이썬 역시 자바와 동일하게 0부터 세는 제로 인덱스zero index 이다. 

 

 

 

추가로 대괄호 안의 숫자를 음수로 입력하면 뒤에서부터 선택할 수 있다. 

 

 

 

문자열 범위 선택 연산자(슬라이싱): [:]

문자열의 특정 범위를 선택할 때 사용하는 연산자다. 예를 들어 문자열에서 첫 번째 문자부터 세 번째 문자까지 선택한다든지 등 범위를 지정하는 것이다. 범위는 대괄호 안에 위치를 콜론(:)으로 구분해서 지정한다. 

 

 

그런데 보면 1번부터 4번까지 녕하세요 가 출력된 게 아니라 1번부터 3번까지인 녕하세 가 출력되었다. 

이유는 파이썬인 <마지막 숫자를 포함하지 않음>으로 적용된 언어이기 때문이다. 그래서 위의 [1:4]로 범위를 지정하면 1번째+2번째+3번째 글자까지만 추출되어 '녕하세'를 출력한다.   

 

[1:4] 범위를 지정했을때의 출력값은 3개. 주의할 지점이다.

 

다시 한번 강조 [0:2]라고 입력하면 (뒤의 숫자)번째까지 선택되는 것이 아니라, (뒤의 숫자-1)번째까지 선택되므로 [0:2]는 0번째 글자부터 1번째 글자를 선택한다. 0번째부터 2번째까지 추출하는 것이 아니므로 주의해야한다. 

 

또, 문자열 범위 선택 연산자는 대괄호 안에 넣는 숫자 둘 중 하나를 생략하여 다음과 같은 형태로도 사용할 수 있다. 뒤의 값을 생략할 때는 자동으로 가장 최대 위치(마지막 글자)까지, 앞의 값을 생략할 때는 가장 앞쪽의 위치(첫 번째 글자)까지 선택한다. 

[1:]
[:3]

 

[1:]의 경우는 뒤의 값을 생략했기 때문에 1번째부터 끝의 문자까지 선택. 

[:3]의 경우는 앞의 값을 생략했기 때문에 0번째부터 뒤의 숫자 3번째 앞의 문자까지 선택한다. 

 

 

지금까지 문자열에 원하는 위치를 지정해 문자를 분리해보았다. 이처럼 [] 연산자를 이용해 문자열의 특정 위치에 있는 문자를 참조하는 것을 인덱싱indexing이라 하고, [:] 연산자를 이용해 문자열의 일부를 추출하는 것을 슬라이싱slicing이라고 한다. 

 

IndexError(index out of range) 예외

IndexError 예외는 리스트/문자열의 수를 넘는 요소/글자를 선택할 때 발생한다. 가령, 5글자인데 10번째 문자에 접근하려는 때에 발생하는 에러다. 즉 문자열에 없는 문자를 선택하고 있으므로 인덱스가 범위를 넘었다고 해서 index out of range라는 오류를 발샌한다. 

 

문자열의 길이 구하기

문자열의 길이를 구할 때는 len() 함수를 사용한다. 이전에 언급했던 것처럼 식별자 뒤에 괄호가 있으면 해당 식별자를 함수라고 부른다. len()도 식별자 뒤에 괄호가 있으므로 함수이다. 

 

그리고 괄호 내부에 문자열을 넣으면 '문자열에 들어있는 문자의 개수(=문자열의 길이)'를 세어준다. 

 

 

현재 코드를 보면 함수가 이중으로 사용되어 있다. 이렇게 함수가 여러 번 중첩되어 사용되면 괄호 안쪽부터 먼저 실행된다.

 

'코딩 테스트 > 코테를 위한 파이썬 기초 문법' 카테고리의 다른 글

f-문자열  (1) 2022.09.30
숫자와 문자열의 다양한 기능  (0) 2022.09.29
변수와 입력  (0) 2022.09.29
파이썬 자료형 - 숫자  (1) 2022.09.29
파이썬 기초  (0) 2022.09.29