4-1. 문자열 자료형

박성혜·2023년 3월 24일
1

[Python] 1. 왕초보

목록 보기
7/20
post-thumbnail

구글 코랩이나 주피터 노트북에서 직접 작성하며 풀어보세요.


'문자열 자료형'은 문자로 나타나는 값을 말한다.

1. 문자열 자료형 표현 방법

이전 글에서 말했다시피
파이썬에서는 문자를 표현하려면, 표현하려는 문자의 앞뒤로 따옴표를 넣어줘야 한다.
이때 앞뒤로 붙인 따옴표의 종류와 개수를 맞춰야 하고, 한 개나 세 개를 붙일 수 있다
두 개씩 붙이거나 네 개 이상을 붙이면 오류가 나온다.

a = 'Hello World!'
b = "Hello World!"
c = '''Hello World!'''
d = """Hello World!"""

a, b, c, d를 출력하면 모두 Hello World!라고 나온다.

따옴표도 문자열로 표현해주고 싶다면
표현하고 싶은 따옴표와 다른 형태의 따옴표를 문자열 앞뒤에 적으면 된다.

a = "Hello' World!"
b = """Hello' World!"""
print(a)
print(b)

Hello' World!
Hello' World!

o 뒤에 붙은 작은 따옴표가 문자열로 취급돼서 출력된 걸 확인할 수 있다.

a = 'He said "Hi" to me.'
print(a)

He said "Hi" to me.

마찬가지로 Hi 양 옆의 큰 따옴표가 출력된 걸 확인할 수 있다.

만약
'문자열로 표현하고 싶은 따옴표'와
'문자열이라는 걸 알려주는 따옴표'를
똑같은 형태로 사용하고 싶다면
아래의 예시처럼 문자열로 표현하고 싶은 따옴표의 앞에 \를 넣으면 된다.

a = 'He said \"Hi\" to me.'
print(a)

He said "Hi" to me.
  • 원화 단위 표시와 기울어진 작대기는 똑같다. 자기 키보드에 나온 걸 사용하면 된다.

2. 이스케이프 코드

이스케이프 코드 : 미리 정의한 문자 조합

이스케이프 코드
\n줄 바꿈(엔터)
\t
\\
\'작은 따옴표 사용
\"큰 따옴표 사용

위 코드를 더 자세하게 설명해보자면

예를 들어 줄 바꿈(엔터) 코드는 \n이다.
컴퓨터는 엔터 키도 문자로 인식하기 때문에, 줄을 바꾸고 싶으면 아래처럼 따로 코드를 쓰거나

a = "Life is too short \n You need Python."
print(a)

Life is too short
You need Python.

작은 따옴표나 큰 따옴표 세 개를 앞뒤로 써주면 된다.

a = """life is too short
You need Python."""
print(a)

Life is too short
You need Python.

\n이나 큰 따옴표 세 개를 입력하지 않고 엔터 키를 치면 이런 에러가 발생한다.

  • 참고로 이 SyntaxError는 작성한 코드에서 띄어쓰기, 철자, 문법 등이 잘못되었을 때 뜨는 에러다.
    아마 프로그래밍을 하시다 보면 자주 보시게 되실 거예요..

문자열에서 줄을 바꾸고 싶을 때는 꼭! 따옴표 세 개를 붙이거나 \n을 입력해야 한다.

3. 문자열 연산

숫자형 자료형은 숫자형 자료형끼리 사칙 연산을 할 수 있다.
문자열도 덧셈과 곱셈이 가능하지만 뺼셈과 나눗셈은 불가능하다.

덧셈

a = 'Python'
b = 'is too fun!'
print(a + b)

Python is too fun!

곱셈

a = 'Python'
print(a * 3)

PythonPythonPython

4. 문자열 길이 구하기

a = 'Python'
print(len(a))

6

print()함수를 보자.
괄호 안에 len()함수가 있는 것이 보인다. 이 함수는 length, 즉 길이를 뜻한다.
괄호 안의 변수의 길이를 구할 때 사용하는 파이썬 내장 함수다.
변수 a에 할당된 Python은 6글자기 때문에 값이 6으로 나왔다.

5. 문자열 인덱싱

인덱싱 : 하나에 접근한다.

파이썬에서는 대괄호를 사용하여 인덱싱을 한다.
인덱싱이 무슨 말인지 예를 들어보겠다.

a = 'Python'
print(a[1])

여기서 print()함수를 보면 괄호 안에 a[1]이 보인다.
a[1]은 a의 1번째에 접근하겠다는 뜻이다.
a는 Python인데 여기서 1번째에 접근한다는 뜻이니
값은 P가 나와야 한다.

이럴 수가? P가 아닌 y가 나왔다.

그렇다.

파이썬에서는 순서를 세는 방법이 다르다.
첫 번째는 0번째라고 읽는다.
헷갈리니 앞으로 1번째는 '첫 번째'가 아니라 '일 번째'라고 읽자.

문자열 Python의 순서는 아래처럼 되는 것이다.

  • P : 0번째
  • y : 1번째
  • t : 2번째
  • h : 3번째
  • o : 4번째
  • n : 5번째

-1번째도 있다.

a = 'Python'
print(a[-1])

n

-1번째는 뒤에서 첫 번째를 뜻한다.
'어 맨 뒤에서 첫 번째는 왜 a[-0]이 아니지?' 라고 생각할 수 있다.
-0이나 +0은 그냥 0이기 때문에 맨 뒤에서 첫 번째는 -1이다.

6. 문자열 슬라이싱

슬라이싱 : 여러 개에 접근한다.

여러 개에 접근하려면 인덱싱을 한 후(대괄호를 친 후) 콜론을 사용하면 된다.
인덱싱과 슬라이싱의 차이를 보자.

  • a[9] : a의 5번째에 접근한다.
  • a[1:9] : a의 1번째부터 9번째 까지(=8번째까지) 접근한다.

주의해야 할 것은 콜론 뒤의 숫자 전까지 접근한다는 것이다.

a = 'Python is too fun!'
print(a[2:9])
print(a[:9])
print(a[3:])
  • a[2:9] → 2번째부터 9번째 까지
  • a[:9] → 0번째부터 9번째 까지
  • a[3:] → 3번째부터 끝까지

파이썬은 줄 바꿈이나 띄어쓰기 같은 공백도 문자로 인식하기 때문에
Python is too fun! 은 총 17개의 문자로 이루어진 문자열이다.

그래서 출력하면 결과 값이 이렇게 나온다.

thon is
Python is
hon is too fun!
  • 참고로 결과 값 중 is가 보라색으로 나온 건 그냥 벨로그 오류다.

7. 문자열 전용 함수

앞서 배운 print함수와 len함수는 파이썬의 내장 함수라서
어떤 형태의 자료형이든 사용할 수 있다.

하지만 문자열 전용 함수는 문자열에서만 사용할 수 있다.
문자열 뒤에 . 을 찍고 문자열 전용 함수 이름을 적어주거나
pirnt함수 안에서 . 을 찍고 문자열 전용 함수 이름을 적어주면 된다.
뭔 말인지 모르겠으니 바로 예시를 보자.

1) format 함수

'문자열 안에 있는 중괄호'에 'format 함수 값'을 넣음

- 정수

a = "I eat {} apples"
print(a.format(3))

I eat 3 apples

중괄호 안에 3이 들어간 걸 확인할 수 있다.

a = "I eat {} apples and {} oranges"
print(a.format(3, 5))

I eat 3 apples and 5 oranges

3과 5가 차례대로 중괄호 안에 들어간 것을 확인할 수 있다.

중괄호 안을 비워두지 않고 숫자를 넣을 수도 있다.
이건 format 함수 값 중, 해당 숫자 번째의 값을 가져온다는 뜻이다.

a = "I eat {0} apples and {0} oranges"
print(a.format(3,5))

I eat 3 apples and 3 oranges

format(3, 5) 중에서 0번째인 3이 중괄호 안에 들어간 걸 확인할 수 있다.

참고로 format을 print함수 안이 아니라 문자열 뒤에 넣어도 된다.
아래 예시를 보면 문자열 뒤에 . 을 찍고 format함수를 적은 걸 확인할 수 있다.

a = "I eat {} apples".format(3)
print(a)

I eat 3 apples
a = "I eat {} apples and {} oranges".format(3,5)
print(a)

I eat 3 apples and 5 oranges
a = "I eat {0} apples and {0} oranges".format(3,5)
print(a)

I eat 3 apples and 3 oranges

- 실수

format함수에 소수를 넣고 특정 소수점 자리까지만 나오게 하려면
{:.숫자f}로 표현하면 된다.
{:.1f}는 '소수점 첫 번째 자리까지만 갖고 오겠다' 라는 말이다.
f는 실수라는 뜻이다.

a = "{:.2f}".format(3.141592)
print(a)

3.14

3.141592 중에서 소수점 두 번째자리까지만 나온 3.14가 출력됐다.

- 공백

* 오른쪽 공백
a = "{:<10}".format("hi")
print(a)

'hi          '
  • {:<10}
    format함수 값의 오른쪽에 10개의 공간을 할당하겠다는 뜻이다.

  • 참고로 결과 값에 붙은 작은 따옴표는 공백을 표현하기 위해 내가 일부러 붙인 것이니, 무시하면 된다.

* 왼쪽 공백
a = "{:>10}".format("hi")
print(a)

'          hi'
  • {:>10}
    format함수 값의 왼쪽에 10개의 공간을 할당하겠다는 뜻이다.
* 양 옆 공백
a = "{:^10}".format("hi")
print(a)

'     hi     '
  • {:^10}
    format함수 값의 양 옆에 총 10개의 공간을 할당하겠다는 뜻이다. 총 10개니까 왼쪽에 5개, 오른쪽에 5개가 생겼다.

2) count 함수

'count 함수 안의 문자'의 개수가 할당된 문자열 안에 몇 개 있는지 알고 싶을 때 사용한다.
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.
count(개수를 셀 문자) 의 형태로 작성한다.

a = "Python is too fun!"
print(a.count('o'))

3

문자 o의 개수인 3을 출력했다.

a = "Python is too fun!".count('o')
print(a)

3

위처럼 print함수 안이 아니라 문자열 뒤에 . 을 찍고 사용해도 된다.

3) find 함수

'find 함수 안의 문자'가 문자열 안에서 어디 있는지 알고 싶을 때 사용합니다.
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.
find(위치를 찾을 문자) 의 형태로 작성한다.

a = "Python is too fun!"
print(a.find('o'))

4
a = "Python is too fun!".find('o')
print(a)

4

만약 문자열 안에 없는 문자라면 값이 -1로 나온다.

4) join 함수

문자열을 join함수 안에 있는 문자열 사이사이에 넣을 때 사용한다.
변수에는 '문자열 사이사이에 넣고 싶은 것'을 할당하고
join함수에는 문자열을 넣으면 된다.

예를 들어서 abcde 사이에 쉼표를 넣고 싶다면 아래와 같이 표현하면 된다.

a = ",".join("abcde")
print(a)

a,b,c,d,e
a = "apple".join("abcde")
print(a)

aapplebapplecappledapplee

5) upper 함수

문자열을 모두 대문자로 만들어준다.
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.

a = 'Python is too fun!'
print(a.upper())

PYTHON IS TOO FUN!

6) lower 함수

문자열을 모두 소문자로 만들어준다.
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.

a = 'PYTHON is Too FUN!'
print(a.lower())

python is too fun!

7) strip 함수

문자열에서 모든 공백과 특정 문자열을 제거한다.
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.

  • 공백만 제거하는 경우
a = "     abcde     "
print(a.strip())
 
'abcde'
  • 공백을 제거하고 특정 문자열을 제거하는 경우
a = "     abcde     "
print(a.strip('c'))
 
'abde'
  • 참고로 결과 값에 붙은 작은 따옴표는 공백을 표현하기 위해 내가 일부러 붙인 것이니, 무시하면 된다.

8) lstrip 함수

문자열에서 왼쪽 공백과 특정 문자열을 제거한다. (l = left)
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.

  • 왼쪽 공백만 제거하는 경우
a = "     abcde     "
print(a.lstrip())
 
'abcde     '
  • 왼쪽 공백을 제거하고 특정 문자열을 제거하는 경우
a = "     abcde     "
print(a.lstrip('c'))
 
'abde     '

9) rstrip 함수

문자열에서 오른쪽 공백과 특정 문자열을 제거한다. (r = right)
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.

  • 오른쪽 공백만 제거하는 경우
a = "     abcde     "
print(a.rstrip())
 
'     abcde'
  • 오른쪽 공백을 제거하고 특정 문자열을 제거하는 경우
a = "     abcde     "
print(a.rstrip('c'))
 
'     abde'

10) replace 함수

특정 문자열을 다른 문자열로 바꿔준다.
replace(기존문자, 바꿀문자) 의 형태로 작성한다.
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.

a = 'Python is too fun!'
print(a.replace('Python','Java')

Java is too fun!

11) split 함수

문자열을 특정 기준으로 자르는 함수다.
split(기준) 의 형태로 작성한다.
문자열 뒤에 붙이거나 print함수 안에서 사용할 수 있다.

a = 'Python is too fun!'
print(a.split())

['Python', 'is', 'too', 'fun!']

공백을 기준으로 잘른 결과다.
그런데 결과 값에 대괄호가 생겼다.
split함수를 사용하면 결과 값에 대괄호가 생긴다.
여기서 결과 값이 보관된 대괄호를 '리스트'라고 부른다.
split함수는 기준에 따라 나눠진 문자열을 리스트 안에 보관해준다.

a = 'Python:is:too:fun!'
print(a.split(:))

['Python', 'is', 'too', 'fun!']

12) startswith 함수

특정 문자열로 시작하는지를 묻는 함수다.

a = "Python is too fun!"
a.startwith("Python")

True

13) endswith 함수

특정 문자열로 끝나는지를 묻는 함수다.

a = "Python is too fun!"
a.endswith("!")

True

14) isalpha 함수

문자열이 문자로만 이루어져있는지 묻는 함수다.
숫자, 특수문자, 문장부호, 공백 없이 오직 문자로만 이루어졌을 때 결과 값이 True 라고 나온다.

a = "Python is too fun"
a.isalpha()

False

위의 코드에서는 문자열 안에 공백이 있어서 결과 값이 False로 나왔다.

a = "Pythonistoofun"
a.isalpha()

True

이제 True 값이 나온 걸 확인할 수 있다.

다른 언어도 적용된다.

a = "안녕하세요"
a.isalpha()

True

15) isdigit 함수

문자열이 숫자로만 이루어져있는지 묻는 함수다.
문자, 특수문자, 문장부호, 공백 등이 없이 오직 숫자로만 이루어졌을 때 True값이 나온다.

a = '300'
print(a.isdigit())

True

16) isalnum 함수

문자열이 숫자와 문자로만 이루어져있는지 묻는 함수입니다. (al = alphabet, num = number)
특수문자, 문장부호, 공백 등이 없이 오직 숫자와 문자로만 이루어졌을 때 True값이 나옵니다.

a = 'hello300'
print(a.isalnum())

True

17) isspace 함수

문자열이 공백으로만 이루어져있는지 묻는 함수다.
숫자, 문자, 특수문자, 문장부호 등이 없이 오직 공백으로만 이루어졌을 때 True값이 나온다.

a = '       '
print(a.isspace())

True

여기까지 문자열 자료형이었습니다.

다음 글에서는 문자열 자료형 실습 문제를 풀어볼게요.

수정이 필요한 부분이나 이해가 안 가는 부분이 있다면 언제든 말씀해주세요!^0^

그럼 이만
총총

profile
인공지능이 인공지능을 개발하면 인공지능일까

0개의 댓글

관련 채용 정보