Q.문자열이란?
문자열은 말그대로 문자들의 나열을 의미한다. 문자열에는 알파벳, 한글, 숫자, 특수문자들이 포함될 수 있다.
(여기서 주의해야하는데, 문자로 표현된 숫자는 계산할 수 없다! 즉, str형 1과 int형 1은 다른 것이며, str형 1은 사칙연산을 포함한 어떤 연산도 수행할 수 없다. 문자로써 1의 형태를 갖고 있을 뿐이다. 문자로 표현된 숫자를 연산하기 위해서는 형변환을 통해 문자->숫자 자료형으로 변환해야한다. 이때 형변환 함수를 사용할 수 있다.)
파이썬에서는 문자열을 str이라는 자료형으로 다룬다.
따옴표
파이썬에서는 문자열과 문자를 표현하기위해 따옴표를 사용한다. 그런데, 따옴표에는 두가지의 종류가 있다. 한국어로 표현하자면 단따옴표와 겹따옴표가 존재한다. 이 둘은 실제로 비슷해보이고 하는 역할도 비슷하지만 C언어에서는 단따옴표는 홑문자를 겹따옴표는 문자열을 표시하는데 사용한다. (이 점은 C언어 정리를 하면서 한번 더 알아보자.)
다행히도, 파이썬에서는 C와 달리 단따옴표와 겹따옴표의 문법적 차이가 없다. 단지 단따옴표를 사용했으면 단따옴표로 끝맺고, 겹따옴표로 시작했다면 겹따옴표로 끝맺으면 된다. 이 규칙을 지키지 않는다면 Syntax Error가 발생한다.
길이에 따른 문자열의 분류
문자열의 길이는 제각각일 것이다. 하지만 몇가지 특징적인 기준을 통해 문자열을 분류해볼 수 있다. 아래의 세가지 케이스에 대해 알아보자.
1. 길이가 0인 문자열
따옴표를 열고 바로 닫은 문자열의 경우에 해당된다. 비었다는 의미에서 Empty string이라고 부른다.
2. 길이가 1인 문자열
문자형을 다루지 않고 문자열형으로 바로 넘어왔다는 점에서 눈치챈 사람도 있겠지만, 파이썬에는 공식적으로 문자형이 존재하지 않는다. 즉 C언어에서의 char형이 존재하지 않는다. 모든 문자와 문자열은 오로지 하나의 자료형 str형으로 사용된다.
따라서 길이가 1인 문자열은 문자형과 같은 형태이지만, 파이썬에서는 문자열로 취급된다는 점에 유의하자.
3. 길이가 2이상인 문자열
컴퓨터의 메모리의 용량에 따라, 길이의 한계가 정해진다. 대부분 GB단위의 램을 가진 컴퓨터를 사용하고 있는 현재에 있어서 문자열의 길이에 제한이 없다고 생각해도 된다.
문자열 연산
파이썬에는 문자열에 대한 많은 연산이 존재한다. 그중 대표적이고 가장 많이 사용하는 5개의 연산에 대해 알아보자.
1. len()
문자열의 길이를 반환하는 함수이다. 따옴표 사이의 문자(알파벳,한글,특수문자,공백 등)들의 개수를 세어 반환한다고 생각하면 된다.
exstr = "Hello world" print(len(exstr)) 실행결과 11
2. +
문자열을 이어붙이는 연산이다. 굉장히 편리하고 직관적으로 문자열을 붙일 수 있도록 도와준다.
ex1 = "Hello " ex2 = "world" res = ex1 + ex2 print(res) 실행결과 Hello world
이 연산을 사용할 때 주의해야하는 부분이 있다. 바로 숫자 자료형에서도 +연산이 존재한다는 것이다! 이로인해, 숫자 자료형과 문자자료형을 섞어 +연산을 수행한다면 TypeError가 발생한다.
따라서, +연산을 사용할 때에는 변수의 자료형을 확실히 파악한 다음, 같은 자료형끼리만 +연산을 수행해주어야 한다.
3. Typecast 함수 (형변환 함수)
문자열을 숫자 자료형으로 변환하거나, 숫자 자료형을 문자열 자료형으로 변환해야하는 경우가 매우 많이 발생한다.
input()함수는 키보드로 입력된 문자나 숫자를 문자열로 반환한다. 즉, 숫자 자료형들에 적용가능한 연산을 바로 적용할 수 없다. 따라서 int(), float() 형변환 함수를 사용하여 문자열 자료형 -> 숫자 자료형으로 변환해준다.
a = '1' b = int(a) c = 2 print(a+c) 실행결과 TypeError: ~~~~~
a = '1' b = int(a) c = 2 print(b+c) 실행결과 3
위의 두 간단한 예제에서 보이는 것처럼 문자열 자료형과 숫자 자료형은 서로 더할 수 없기때문에, 한쪽을 변환해주어야 한다.
그렇다면 문자로 이루어진 문자열을 숫자 자료형으로 변환하려고 하면 어떻게 될까? 당연히 오류가 발생한다.
a = 'hello world' print(int(a)) 실행결과 Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> print(int(a)) ValueError: invalid literal for int() with base 10: 'hello world'
4. *
곱하기 기호로 익순한 연산자이다. 문자열에서도 비슷한 역할을 수행한다. 우리는 처음 수학에서 곱셈을 배울 때, 반복되는 덧셈을 쉽게 표현하기 위해 곱셈을 사용한다고 배웠다. 문자열에서의 곱셈은 정확히 이 정의에 부합한다.
이 연산은 반복 후 합치기를 수행한다.
a = "abc" a = a*5 print(a) 실행결과 abcabcabcabcabc
이 실행결과를 보면 바로 이해가 될 것이다.
그렇다면 음수나 0을 곱한 경우에는 어떻게 될까?
이 경우에는 연산 전의 문자열이 어떤 길이를 갖고있었는지에 상관 없이 항상 길이가 0인 문자열 즉 Emptystring이 결과가 된다.
Escape Sequence
문자열을 선언할 때 한가지 문제가 생길 수 있다. 그 주범은 '
어퍼스트로피는 문자열을 표현할 때 사용하는 기호와 완전히 같다. 따라서 문자열 속에 어퍼스트로피가 포함되어있는 경우 큰따옴표로 문자열을 시작하고 끝맺어야한다.
그런데, 간혹 인용문까지 포함되어 문자열 속에 큰따옴표와 어퍼스트로피가 모두 포함되어야 하는 경우가 있다.
이런 경우, 문자열 안에서 예외처리를 해주어야한다. 예외처리를 하는 방법은 간단하다.
문자열에 포함되기를 원하는 따옴표 앞에 백슬래쉬(한글 자판에는 \)기호를 써주면 된다. 이 기호는 escape character라고 불린다.
print("It\'s mine.") 실행결과 It's mine.
따옴표 외에도 여러가지 경우가 존재한다.
Escape Sequence | Description |
\' | ' |
\" | " |
\\ | \ |
\t | 탭(열간격 맞춤. 구구단 등을 출력할 때 유용함.) |
\n | 개행(엔터) |
\r | carriage return커서표시를 해당 행 제일 앞으로 위치시킴. |
이때 escape character자체는 문자열의 길이에 포함되지 않는다는 점을 기억하자!
tstr = "It\'s mine." print(tstr) len(tstr) 실행결과 It's mine. 10
개행 \n
이 Escape Sequence는 개행을 의미한다. 출력에 엔터를 포함하는 방법이다.
print("Hello\nworld\nhaha") 실행결과 Hello world haha
매번 개행을 위한 이스케이프 시퀀스를 작성하기 귀찮다면 docstring과 비슷한 방법을 사용할 수 있다.
tstr = '''one two three''' 실행결과 one two three
Print()
Python-1. 함수란 무엇인가? / Python의 대표적인 내장함수
변수와 기본적인 용어에 관한 내용들은 아래의 포스트에서 확인해주시기 바랍니다! 더보기 Base.자료형, 변수, 메모리 주소 자료형 Ptyhon에서 지원하는 자료형을 기준으로 작성하였다. 사용하는
dot-learning.tistory.com
위의 포스트에서 print함수는 화면에 파라메터로 받은 값을 출력해주는 함수라고 설명했다.
이때, print함수는 여러개의 파라메터를 받을 수 있으며, 파라메터 사이를 sep으로 지정된 문자열로 표시하며 출력한다.
a = 1 b = 2 c = 3 cstr = "is" print(a ,"+" ,b ,cstr ,c) 실행결과 1 + 2 is 3
print함수에 대해 더 알아보기 위해 help 함수를 사용하자.
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
위와 같은 설명을 확인할 수 있다.
sep은 파라메터 사이를 표현하기 위해 사용되는 문자열을 표시하는 것이고, end는 입력된 파라메터의 출력이 모두 끝났을 때, 어떤 문자열을 출력하며 종료할 것인지를 나타내는 것이다. 기본적으로 sep은 공백한개, end는 개행문자로 설정되어있다.
우리는 이 sep과 end를 변경할 수 있다.
a = 1 b = 2 c = 3 cstr = "is" print(a ,"+" ,b ,cstr ,c,sep ="!",end = "~") 실행결과 1!+!2!is!3~
Input()
프로그램 사용자로부터 키보드를 통해 입력값을 받을 수 있는 함수이다.
아래와 같은 방법으로 사용할 수 있다.
instr = input() print(instr) 입력예시 hello world 출력결과 hello world
이때, 숫자도 입력받을 수 있다.
단, input함수를 통해 입력받는 모든 값들은 문자열형으로 Type이 지정되어 저장된다. 즉 키보드에서 숫자를 눌러 숫자를 입력했더라도, 당장 python내부의 변수에는 문자열 자료형을 가진 숫자로 저장된다는 것이다.
사칙연산등을 수행하기위해서는 int() 또는 float()와 같은 typecast함수를 사용해 형변환을 해주어야 한다.
input함수에는 파라메터로 입력받기 전 출력할 문자열을 넣을 수 있다.
instr = input("입력해보세요\n") print(instr) 실행과정 입력해보세요 입력예시 hello world 출력결과 hello world
이렇게 입력받기 전 input에 파라메터로 주어진 문자열을 출력하고 입력을 기다린다.
String 구조
문자열은 C언어에서의 배열과 같은 구조를 갖는다. 이를 활용해 문자열의 필요한 부분만을 잘라 사용할 수 있다.
문자열의 맨 앞부분은 문자열의 0번째, 그다음은1, 2, 3, 4,..., n번째의 문자이다.
tstr = "hello world! " print(t[2]) print(t[0:4]) 실행결과 l hell
첫번째 print함수에서는 tstr문자열의 2번째 원소 즉 l을 출력했다.
두번째 print함수에서는 tstr문자열의 0~3번째 원소를 출력했다.
이때 주의해야되는 점은 범위를 나타내기 위해 콜론:을 사용하였다면 시작하는 원소는 포함되지만 마지막 원소는 포함되지 않는다는 점이다.
또한 음수역시 인덱스로 사용할 수 있다.
tstr = "hello world!" print(t[-1]) print(t[0:-3]) 실행결과 ! hello wor
첫번째 print함수에서는 tstr문자열의 마지막에서부터 1번째 원소가 출력되었다.
두번째 print함수에서는 tstr문자열의 0번째부터 뒤에서부터 4번째 원소까지 출력되었다.
또한 인덱스에 step값을 지정할 수 있다. 몇칸 씩 건너뛰면서 사용할것인지 설정할 수 있다는 말이다.
step이 2이고 0:10까지의 원소를 사용한다면
0,2,4,6,8번째 원소만 사용된다.
이를 다음과 같이 표시한다.
tstr = "hello world! " print(t[0:10:2]) 실행결과 hlowr
step역시 음수를 사용할 수 있다.
tstr = "hello world!" inversetstr = tstr[::-1] print(tstr) print(inversetstr) 실행결과 hello world! !dlrow olleh
거꾸로 사용된다는 점을 알 수 있다.
'Development language > Python' 카테고리의 다른 글
Python-7. Conditional Statement(조건문) / Boolean application (0) | 2021.11.11 |
---|---|
Python-6. Boolean / 논리연산자 / 비교연산자 (0) | 2021.11.09 |
Python-4. 함수 작성 방법 (0) | 2021.11.02 |
Python-3. 함수의 파라메터와 반환 / 4가지의 경우. (0) | 2021.11.02 |
Python-2.함수 정의와 호출 / 객체 선언 / 지역변수 (0) | 2021.10.06 |