문자열 (string)
문자열을 만드는 데에는 4가지 방법이 있다
"큰 따옴표"
'작은 따옴표'
"""큰 따옴표*3"""
'''작은 따옴표*3'''
우리는 여기서 왜 문자열을 지정하는데에 4가지 방법이나 필요한지 궁금해할 수 있다
그렇다 사람에게 쉬운건 컴퓨터에게 어렵고 컴퓨터에게 쉬운건 사람에게 어렵다 (대부분)
"she's gone" 이라는 텍스트를 프린트해보자 큰 따옴표를 포함해서 말이다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#1
a="she's gone"
print(a)
# she's gone
#2
a='she's gone'
print(a)
# SyntaxError: invalid syntax
#3
a=""she's gone""
print(a)
# SyntaxError: invalid syntax
#4
a='"she's gone"'
print(a)
# "she's gone"
|
cs |
#1 에서 컴퓨터가 인식하는 문자열은 큰 따옴표 안에 있는 문자열 뿐이다
구문오류가 뜨진 않지만 큰 따옴표가 포함된 문자열이 프린트되진 않는다
#2 에서 사람이 언뜻 보기에는 #1과 같은 결과가 나와야 한다고 생각하겠지만
그건 사람의 눈으로 보았기 때문이다 she's gone에 이미 작은 따옴표가 포함되어 있고
컴퓨터는 작은 따옴표로 깜싸진 'she'만 문자열로 인식하고 s gone' 은 작은 따옴표 하나가 없는 것으로 판단
구문 오류가 뜨게 된다
#3 에서도 사람이 보기엔 큰 따옴표 안에 있는 "she's gone" 을 문자열로 출력할거라 생각하지만
컴퓨터는 she's gone 부분을 감싸고 있는 "" "" 를 알 수 없는 문법이라고 출력한다
만약 """she's gone""" 이라고 입력했다면 구문오류는 뜨지 않지만 #1과 동일한 결과가 나온다
#4 에서는 작은 따옴표 안에 있는 "she's gone" 전체를 문자열로 인식하게 된다
이렇듯 우리가 출력하고자 하는 문자열에 큰 따옴표나 작은 따옴표가 포함될 수 있기 때문에
또한 컴퓨터는 사람처럼 유연한 사고를 하기 힘들기 때문에 파이썬에서는 문자열을 4가지 방식으로 표현한다
1
2
3
4
|
#1
a = "\"she's gone\""
print(a)
# she's gone
|
cs |
하지만 위 예시의 #3의 경우 문자열로 지정하고 싶은 큰 따옴표 안에 백슬래쉬를 넣어준다면
백슬래쉬 뒤에 따라오는 큰 따옴표나 작은 따옴표는 문자열로 인식하게 할 수 있다
그렇다면 문자열은 여러 줄로 표현할 때는 어떤 방법을 사용해야할까?
1
2
3
4
5
|
#1
a = "life is too short,
you need python."
print(a)
# SyntaxError: EOL while scanning string literal
|
cs |
우리는 파이썬이 코드를 한 줄씩 실행하는 인터프리터 언어란걸 잊지 말아야 한다
해당 구문 오류는 따옴표 등 문장부호의 열림닫힘이 맞지 않을 때 발생한다
따라서 2번째에 닫는 큰 따옴표가 없기 때문에 구문 오류가 뜬 것이다
우리는 이것을 이스케이프 코드를 사용해서 해결할 것이다
이스케이프 코드란?
출력물을 보기 좋게 정리하기 위해 미리 정의해 둔 문자 조합이다
1
2
3
4
5
|
#1
a = "life is too short,\nyou need python."
print(a)
# life is too short,
# you need python.
|
cs |
백슬래쉬+n은 문자열에서 줄 바꿈을 위해 사용한다!
하지만 우리는 항상 극단적으로 생각해야 한다 우리가 줄바꿈해야할 문자열이 10000줄짜리라면...?
이스케이프 코드를 만번을 넣을 것인가? 물론 그런 고민은 누군가가 미리 해줬고 해결도 해줬다
1
2
3
4
5
6
7
8
|
#1
a = """life is too short,
you need python."""
print(a)
# life is too short,
# you need python.
|
cs |
앞서 봤던 큰따옴표(또는 작은따옴표) 3개를 사용하는 문자열은
줄바꿈이라던지 탭간격이라던지 모두 적용해서 표현한다
문자열의 연산
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#1
a="YES!"
print(a*3)
# YES!YES!YES!
#2
a="YES!"
b=" or "
c="NO!"
print(a+b+c)
# YES! or NO!
#3
a="YES!"
b=" or "
c="YES!"
print(a+b+c)
# YES! or YES!
|
cs |
위와 같이 문자열은 연산자를 통해서 반복하거나 더할 수 있고
변수를 이용했기 때문에 #2에서처럼 변수 c를 변경하는 것으로 손쉽게 #3의 결과를 낼 수 있다
그렇다면 같은 문자열을 3번 반복하고 싶을 때 우리는 어떻게 해야할까?
*쓰기 귀찮으니까 그냥 print()를 복사 붙여넣기 3번하면 되지 않을까?
라고 생각한 당신에게 묻겠다 문자열을 5000번 반복해야한다면 어쩔 것인가?
그리고 4317번째 문자열 뒤에 어떤 문자열을 추가해야 한다면?
그 추가한 문자열을 자주 바꿔야 한다면?
그렇다 우리가 한 고민은 누군가도 했고 역시나 그렇듯 답도 내놨다
조건1. YES!라는 문자열은 총 10번 반복되야 한다
조건2. NO!라는 문자열은 7번째 YES! 뒤에 위치해야 한다
조건3. YES!의 총 개수와 NO!의 위치는 언제든 수정요청이 들어올 수 있다
위 조건의 맞는 문자열을 매일 프린트하는 업무를 맡았다고 가정해보자
우리는 문자열을 반복하는 방법과 더하는 방법도 알고 있으니
다음과 같이 풀어낼 수 있다
1
2
3
4
5
|
#1
a="YES!"
b="NO!"
print(a*7+b+a*3)
#YES!YES!YES!YES!YES!YES!YES!NO!YES!YES!YES!
|
cs |
하지만 우리는 항상 극단적으로 생각해야 하기 때문에
제시된 조건과 print 안의 식이 굉장히 복잡하다면 어떻게 대응해야하는지도 고민해야 한다
그래서 다음과 같은 방식으로 수정요청에 조금 더 신속하게 대응할 수 있다
1
2
3
4
5
6
7
8
|
#1
a="YES!"
b="NO!"
c=10
d=7
print(a*d+b+a*(c-d))
#YES!YES!YES!YES!YES!YES!YES!NO!YES!YES!YES!
|
cs |
이런식으로 YES!의 총 개수를 변수로 설정하고 NO!의 위치도 변수로 설정한다면
YES!의 총개수를 수정해야할 때도 NO!의 위치를 수정해야할 때도
또는 식이 복잡해진다면 다른 변수를 또 추가하는 식으로 생각해볼 수 있다
'dev > python' 카테고리의 다른 글
[python] 기본 연산자(1) - 산술 연산자 (0) | 2022.01.28 |
---|---|
[python] 자료형 - 문자열(2) - 인덱싱, 슬라이싱 (0) | 2022.01.06 |
[python] 자료형 - 숫자형 (0) | 2022.01.04 |
[python] 자료형 - 변수 (0) | 2022.01.03 |
[python] 파이썬에 대해 (0) | 2022.01.03 |