(나도코딩의 파이썬 입문) 4장. 문자열 다루기(p.93 ~ p.116)

2023. 2. 21. 20:04독서

반응형

안녕하세요!

<코딩 자율학습 나도코딩의 파이썬 입문> 멘토를 담당하게 된 이안입니다.

 

오늘은 4장 '문자열 다루기'를 학습할 거예요!

vscode에서 ch04.py 파일을 생성하고 시작해 주세요.

 

 

오늘 공부할 내용은 다음과 같습니다.

 

 

🧐 공부할 내용(p.49~p.67)

  • 문자열이란
  • 원하는 만큼 문자열 자르기: 슬라이싱
  • 함수로 문자열 처리하기
  • 문자열 포매팅
  • 탈출 문자

 

 

1. 문자열이란


문자열은 문자들의 집합입니다.

 

그럼 '문자' 자료형을 알아야 할까요? 감사하게도 파이썬은 '문자'자료형은 없습니다. (있는 게 좋을 때도 있습니다.)

 

먼저 책의 예제를 따라 해 보죠.

 

sentence1 = "나는 소년입니다."
print(sentence1)

sentence2 = "파이썬은 쉬워요."
print(sentence2)

sentence3 = """
나는 소년이고, 파이썬은 쉬워요.
"""

print(sentence3)

 

그리고 우리는 2장에서 문자열은  '+' 연산자를 통해서 문자열을 합칠 수 있다고 배웠습니다.

 

그럼 sentence1과 sentence2를 합쳐보죠.

 

sentence1 = "나는 소년입니다."

sentence2 = "파이썬은 쉬워요."

print(sentence1 + sentence2)

 

결과를 확인하셨나요?

 

왜 sentence3처럼 나오지 않을까요?

 

그것은 + 연산자는 문자열 2개를 합쳐주는 것뿐이지 줄을 정리하는 등의 기능은 없기 때문입니다.

자세한 것은 뒤에 나오는 탈출문자에서 알아볼게요.

 

 

2. 원하는 만큼 문자열 자르기: 슬라이싱


어떤 프로그래밍 언어를 사용하시던 문자열 자르기를 사용할 일은 정말 많습니다.

문자열을 왜 자르냐고요?

 

예를 들어 다음과 같은 기록이 있다고 가정해 봅시다.

 

"2023-02-21 14:08:30 블로그 글 작성"

 

 

저는 이때 "블로그 글 작성"이 언제 일어난 이벤트인지 기록하고 싶습니다.

그럼 어떻게 기록할 수 있을까요?

 

이때 문자열 슬라이싱이 필요합니다.

 

 

슬라이싱은 인덱스를 기준으로 사용할 수 있습니다.

 

책에서는 총 4가지 방법을 소개합니다.

 

* 변수명[특정 인덱스]

* 변수명[: 종료인덱스]

* 변수명[시작 인덱스:]

* 변수명[:]

 

 

첫 번째 방법은 문자열의 특정 인덱스의 문자를 가져오는 방법입니다.

 

s = "파이썬은 쉬워요."
print(s[0]) # 파 출력

 

어 그런데 이상합니다. 첫 번째 문자가 '파'인데 왜 0번째 문자가 '파'인 걸까요?

 

그것은 프로그래밍 언어는 첫 번째는 모두 0이기 때문입니다.

왜 그럴까요? 바로 메모리 관리 때문입니다.

 

지금은 어려운 얘기이기 때문에 메모리 관리 때문이라고 알아두시면 편할 거 같아요.

 

 

두 번째 방법은 문자열을 처음부터 종료 인덱스 -1 번째까지 슬라이싱하는 방법입니다.

 

s = "파이썬은 쉬워요"
print(s[:4])

 

쉽죠? 꼭 기억할 것은 '맨 마지막은 포함하지 않는다'입니다.

인덱스 -1까지 가져온다고 생각하시면 편해요.

 

세 번째 방법은 시작 인덱스부터 끝까지 슬라이싱 하는 방법입니다.

 

s = "파이썬은 쉬워요"
print(s[5:])

 

그리고 책에서 소개하는 음수 인덱스로 슬라이싱 하는 방법이 있어요.

 

음수 인덱스는 정말 많이 사용하니 꼭 기억하시길 바라요!

 

 

3. 함수로 문자열 처리하기


책에서 파이썬 문자열에서 사용하면 유용한 함수를 소개하고 있어요.

 

표 4-1에 나오는 문자열 처리 함수는 정말 많이 사용한답니다.

 

특히나 islower() 혹은 isupper(), count(), replace()는 정말 많이 사용하니까 기억해 주세요!

 

그럼 간단하게 실습해 볼까요?

 

s = "PYTHON is super easy"

print(s.lower())  # python is super easy
print(s[:6].lower())  # python
print(s.upper())    # PYTHON IS SUPER EASY
print(s[7:].upper())  # IS SUPER EASY
print(s[:6].isupper())  # True
print(s[:6].islower()) # False
print(s.find("PYTHON")) # 0
print(s.index("PYTHON")) # 0
print(s.count("easy")) # 1

 

올바르게 작동하나요?

 

 

🥕멘토 TIP

find 함수의 경우 만약 찾는 문자열의 길이가 1 이하라면 존재할 때 그 인덱스를 반환하고

찾는 문자열이 1보다 크다면 첫 시작 인덱스를 반환합니다.

 

 

 

p.102에 나오는 방식대로 시작인덱스와 종료 인덱스를 함수 안에 지정해서 사용할 수도 있답니다.

 

 

위에 코드를 실행하시고 혹시 이런 생각 드시지 않았나요?

 

find랑 index랑 같은 함수인데 왜 두 개 다 있지?

 

 

p.104 에도 상세하게 설명되어 있지만, 문자열을 찾지 못했을 때 반환하는 값이 다릅니다.

 

find 함수의 경우 문자열을 찾지 못하면 -1을 반환합니다.

에러가 발생하지는 않죠.

 

 

하지만 index 함수의 경우 문자열을 찾지 못하면 에러를 던지게 됩니다.

 

해볼까요?

 

 

그렇기 때문에 index와 find를 사용하실 때 꼭 주의하시고 사용하시길 당부드려요!!

 

에러를 처리하는 것은 10장 예외 처리에서 자세하게 배워요.

 

 

 

 

그리고 책에서 소개하는 len() 함수!

 

정말 많이 사용됩니다. 문자열의 길이를 반환해 주는데, 문자열뿐만 아니라 리스트에서도 사용되니 꼭 기억하시길 바라요!

 

 

 

🥕멘토 TIP

 

사실 엄밀하게 말하면 lower(), islower() 등은 함수가 아니라 메서드가 맞는 표현입니다.

 

함수는 class에 상관없이 사용할 수 있는 것이 함수이고, 메서드는 특정 class에 종속되어 있는 것이 메서드입니다.

문자열인 string(현재 클래스 이름은 str) 역시 class입니다.

위에서 '함수'라고 불리는 isupper(), islower()는 문자열 자료형에서 밖에 사용하지 못하는 기능입니다.

 

그렇기 때문에 위에서 소개한 '함수'라고 불리는 녀석들 역시 메서드인 것이죠.

 

 

이렇게 실행해서 확인하는 것도 하나의 방법입니다~

 

 

 

4. 문자열 포매팅


문자열 포매팅에는 총 3가지 방법이 있어요.

 

1. 서식 지정자 사용

2. format() 함수 사용

3. f- 문자열 사용

 

 

나는 20살입니다.

나는 파이썬을 좋아합니다.

Apple은 A로 시작해요.

나는 20살입니다.

 

이 4 문장을 모두 다른 포맷을 사용해서 출력해 볼게요!

 

age = 20
lang = "python"
startsWith = "A"

print("나는 %d살 입니다." % age)
print("나는 %s을 좋아합니다." % lang)
print("Apple은 %s로 시작해요" % startsWith)

print("나는 {}살 입니다.".format(age))
print("나는 {}을 좋아합니다.".format(lang))
print("Apple은 {}로 시작해요".format(startsWith))


print(f"나는 {age}살 입니다.")
print(f"나는 {lang}을 좋아합니다.")
print(f"Apple은 {startsWith}로 시작해요")

 

 

🥕멘토 TIP

서식 지정자는 출력할 변수가 하나일 때 유용합니다.

두 개 이상 넘어가면 반드시 순서를 지켜줘야 하기 때문이죠.

 

반면 format은 p.109에 있는 것처럼 순서를 바꿔서 사용하거나, 혹은 format안에 값을 따로 넣어서 사용할 수도 있습니다.

외부에 변수가 선언되어 있지 않을 때 유용하겠죠?

 

 

f-문자열은 외부에 선언되어 있다면 직관적으로 출력 결과를 확인할 수 있기 때문에 편리합니다.

 

저는 개인적으로 f-문자열을 자주 사용하는 편입니다.

실제로 현업에서도 f-문자열을 사용하는걸 자주 봤고요.

 

작성하는 사람이 편한 것을 사용하면 되지만, 가능하면 가독성이 높은 것을 택하라고 말씀드리고 싶네요.

 

 

 

5. 탈출 문자


앞서 나왔던 sentence1 + sentence2를 기억하시나요?

 

sentence1 = "나는 소년입니다."
print(sentence1)

sentence2 = "파이썬은 쉬워요."
print(sentence2)

sentence3 = """
나는 소년이고, 파이썬은 쉬워요.
"""

print(sentence3)

 

sentence1과 sentence2를 합치면 "나는 소년입니다. 파이썬은 쉬워요."라는 한 문장이 되었죠?

 

이제 이 문장을 2줄로 분리해 볼 겁니다.

 

2장에서도 제가 잠깐 설명했는데요, 줄 바꿈을 하기 위해서는 '\n'를 추가하시면 됩니다. (윈도우 기준 (₩n)

이렇게 말이죠.

 

sentence1 = "나는 소년입니다."


sentence2 = "파이썬은 쉬워요."

print(sentence1+"\n"+sentence2)

 

그럼 줄이 나눠져서 출력하는 것을 확인하실 수 있어요.

 

 

그리고 두 번째로 나오는 역슬래시 역시 이전 시간에 잠깐 알려드렸죠?

 

print("안녕하세요 저는 \"이안멘토\"입니다.")

 

이렇게 문자열 안에 바깥에 쓰인 따옴표와 같은 따옴표가 있다면 역슬래시로 표시할 수 있습니다.

 

경로를 표시하는 경우에도 역슬래시를 활용하면 사용할 수 있는 것을 책에서 확인하실 수 있어요!

 

 

사실 나머지 \r, \b, \t 연산자는 잘 사용하지 않습니다.

 

이유는 2가지입니다.

1. 가독성이 좋지 않다.

2. 에디터 혹은 실행기마다 결괏값이 다를 수 있다.

 

사실 가장 큰 문제는 2번째 문제입니다.

내 컴퓨터에서는 되는데 다른 컴퓨터에서는 안 된다? 큰 재앙입니다.

 

그렇기 때문에 표 편하고 싶은 문자열을 변수에 저장해서 출력하시는 것을 저는 추천드려요.

 


이번 장에서는 파이썬의 문자열에 대해서 알아봤어요.

문자열 어땠나요? 재밌지 않았나요?

문자열은 사용할수록 재밌어지는 자료형이에요~

 

꼭 1분 퀴즈와 복습을 통해서 다시 한번 오늘 배운 것을 익혀주세요!

 

 

제가 공부한 내용을 보고 궁금한 점이 있으면 댓글 남겨주세요!

확인 후 답변해 드리겠습니다.

그럼 다음 5장에서 만나요!

 

✅ 정리

* 문자열이란

    *문자의 집합

* 원하는 만큼 문자열 자르기: 슬라이싱

   * 문자열을 자르는 세 가지 방식

* 함수로 문자열 처리하기

    * isupper, islower 등

* 문자열 포매팅

   * 포매팅 세 가지 방식(서식 지정자, format, f-문자열)

* 탈출문자

    * \n,  \\, \t, \r, \b

반응형