문자열은 문자와 기호가 순서대로 나열된 값이다.
앞서 문자열을 연산에 활용하고, print()로 출력하고, input() 함수의 반환값으로 다뤘으며,
str() 함수와 f-문자열도 간단히 사용했다.
이번 장은 문자열을 정확히 표현하고 출력하는 방법에 초점을 둔다. 다음 장에서는 문자열을 순차 자료형으로 다루는 인덱싱, 슬라이싱, 문자열 메서드를 소개한다.
9.1빈 문자열¶
어떤 문자도 포함하지 않는 문자열을 빈 문자열empty string이라 한다. 빈 문자열은 다음 세 가지 방식으로 만들 수 있다.
empty_str1 = ''
empty_str2 = ""
empty_str3 = str()
print(empty_str1 == empty_str2 == empty_str3)True
빈 문자열을 출력하면 화면에는 아무것도 보이지 않는다. 하지만 보이지 않을 뿐이며, 길이가 0인 문자열 값이다.
print(empty_str1)
print(len(empty_str1))
0
반면에 ' '는 공백 문자 하나를 포함한 문자열이다.
역시 눈에 보이지 않지만 길이가 1인 문자열 값이다.
blank = ' '
print(len(blank))1
9.1.1예제¶
예제 1
빈 문자열에서 시작하여 for 반복문으로 문자열 '1234'를 만들어라.
단, range(4)를 이용한다.
답:
빈 문자열에 숫자를 문자열로 바꾼 값을 차례대로 이어붙인다.
result = ''
for i in range(4):
result = result + str(i + 1)
print(result)1234
예제 2
작은 도서관에서 새 책장 번호표를 만든다. 처음에는 아무 글자도 없는 번호표에서 시작하여 A1A2A3을 완성하라.
단, range(3)을 이용한다.
답:
빈 문자열을 번호표의 출발점으로 두고, 반복할 때마다 A와 번호를 이어붙인다.
label = ''
for floor in range(3):
label = label + 'A' + str(floor + 1)
print(label)A1A2A3
9.1.2연습문제¶
문제 1
아래 코드가 False를 출력하는 이유를 설명하라.
print('' == ' ')False
문제 2
행사장 입구에서 손님에게 순번 팔찌를 나눠 준다. 빈 문자열에서 시작하여 for 반복문으로 손님1 손님2 손님3 형태의 안내 문구를 만들어 출력하라.
9.2화이트 스페이스¶
화이트 스페이스whitespace는 화면에 직접 보이지는 않지만 문자열 안에서 공백, 줄바꿈, 간격 등을 나타내는 문자다. 다음 세 가지 화이트 스페이스를 가장 많이 사용한다.
| 표기 | 의미 |
|---|---|
' ' | 공백 문자 |
'\t' | 탭 |
'\n' | 줄바꿈 |
다음 세 개의 문자열엔 각각 공백, 탭, 줄바꿈 화이트 스페이스가 포함되어 있어서 출력 결과가 서로 많이 다르다.
print('A B') # 공백 포함
print('A\tB') # 탭 포함
print('A\nB') # 줄바꿈 포함A B
A B
A
B
화이트 스페이스는 모두 한 개의 문자로 취급된다. 따라서 위 세 문자열의 길이 모두 3이다.
print(len('A B'))
print(len('A\tB'))
print(len('A\nB'))3
3
3
9.2.1예제¶
예제 1
문자열 ' \t\n'을 세 번 반복한 문자열의 길이를 출력하라.
답:
공백, 탭, 줄바꿈은 모두 길이 1의 문자이므로 한 묶음의 길이는 3이다.
spaces = ' \t\n' * 3
print(len(spaces))9
예제 2
카페 직원이 간단한 주문표를 출력한다. f-문자열을 이용하여 다음과 같이 출력하는 두 줄 코드를 작성하라.
Menu Price
Latte 2000답:
print(f'{"Menu":<8}{"Price":>5}')
print(f'{"Latte":<8}{2000:>5}')Menu Price
Latte 2000
9.2.2연습문제¶
문제 1
문자열 'A\tB'의 길이를 출력하라.
문제 2
안내 데스크에서 방문자 명찰을 출력한다. f-문자열을 이용하여 다음과 같이 출력하는 두 줄 코드를 작성하라.
Name Time
Ada 09:309.3이스케이프 시퀀스¶
문자열에 따옴표, 백슬래시, 화이트 스페이스처럼 특별한 의미를 갖는 문자를 포함시키려면
백슬래시(\)로 시작하는 이스케이프 시퀀스escape sequence를 사용한다.
| 표기 | 문자열에 들어가는 문자 |
|---|---|
\' | 작은따옴표 |
\" | 큰따옴표 |
\\ | 백슬래시 자체 |
\n | 줄바꿈 |
\t | 탭 |
따옴표 기호 포함
문자열을 감싸는 따옴표와 동일한 따옴표를 문자열 안에 넣을 때는 이스케이프 시퀀스가 필요하다.
sentence1 = 'I\'m learning Python.'
sentence2 = "그가 \"좋아요\"라고 말했다."
print(sentence1)
print(sentence2)I'm learning Python.
그가 "좋아요"라고 말했다.
이스케이프 시퀀스를 사용하지 않으면 SyntaxError 오류가 발생한다.
이유는 문자열의 시작과 끝이 명확하지 않게 되기 때문이다.
sentence1 = 'I'm learning Python.'
print(sentence1) Cell In[6], line 1
sentence1 = 'I'm learning Python.'
^
SyntaxError: unterminated string literal (detected at line 1)
반면에 감싸는 따옴표를 문자열 내부에 사용된 따옴표와 다르게 하면 이스케이프 시퀀스를 사용하지 않아도 오류가 발생하지 않는다.
sentence3 = "I'm learning Python."
print(sentence3)I'm learning Python.
백슬래시 기호 포함
백슬래시 기호 자체를 문자열에 넣으려면 \\처럼 두 번 적는다.
path = 'C:\\Users\\student\\notes.txt'
print(path)C:\Users\student\notes.txt
9.3.1예제¶
예제 1
큰따옴표로 감싼 문자열 안에 큰따옴표 자체를 넣어 그는 "Python"을 좋아한다.를 출력하라.
답:
print("그는 \"Python\"을 좋아한다.")그는 "Python"을 좋아한다.
예제 2
탭, 줄바꿈, 백슬래시를 모두 사용하여 첫 줄에는 탭 뒤의 Hello, 둘째 줄에는 \가 출력되게 하라.
답:
print('\tHello\n\\') Hello
\
예제 3
여행 기록 앱에 남길 문장을 만든다. 출력 결과가 민지는 "출발!"이라고 말하고 C:\trip에 기록했다.가 되도록 하라.
답:
print('민지는 \"출발!\"이라고 말하고 C:\\trip에 기록했다.')민지는 "출발!"이라고 말하고 C:\trip에 기록했다.
9.3.2연습문제¶
문제 1
작은따옴표로 감싼 문자열을 사용하여 I'm learning Python.을 출력하라.
문제 2
문자열 C:\Users\student\notes.txt를 출력하라.
문제 3
비밀 실험실의 로그에 경고: "door\main" 확인이라는 문장을 남기려 한다. 따옴표와 백슬래시가 화면에 그대로 보이도록 출력하라.
9.4날 문자열¶
문자열 앞에 r 또는 R을 붙이면 날 문자열raw string이 된다.
날 문자열에서는 \n, \t 같은 이스케이프 시퀀스가 특별한 기능으로 해석되지 않고
대부분 그대로 보존된다.
다음 코드에서 일반 문자열과 날 문자열의 차이를 확인하라.
normal = 'Python\nis\teasy'
raw = r'Python\nis\teasy'
print(normal)
print(raw)Python
is easy
Python\nis\teasy
날 문자열은 특히 파일 경로처럼 백슬래시가 자주 등장하는 문자열에서 유용하게 활용된다.
print('C:\\some\\name')
print(r'C:\some\name')C:\some\name
C:\some\name
9.4.1예제¶
예제 1
일반 문자열과 날 문자열에서 \t\n이 어떻게 다르게 보이는지 확인하라.
답:
print('A\t\nB')
print(r'A\t\nB')A
B
A\t\nB
예제 2
사진 정리 프로그램이 오늘 저장할 폴더를 안내한다. 날 문자열을 사용하여 D:\album\2026\spring 경로가 그대로 보이게 출력하라.
답:
print(r'D:\album\2026\spring')D:\album\2026\spring
9.4.2연습문제¶
문제 1
아래 두 코드의 출력 차이를 설명하라.
print('C:\new')
print(r'C:\new')C:
ew
C:\new
문제 2
다음 코드를 실행할 때 오류가 발생하는 이유를 설명하고 대안을 제시하라.
print(r'C:\Users\student\') Cell In[92], line 1
print(r'C:\Users\student\')
^
SyntaxError: unterminated string literal (detected at line 1); perhaps you escaped the end quote?
9.5f-문자열 서식 지정¶
f-문자열은 값을 문자열 안에 넣는 데 그치지 않고, 출력 폭과 정렬 방식, 소수점 자릿수 등의 서식을 지정할 수 있다.
서식 지정은 중괄호 안에서 콜론(:) 뒤에 작성한다.
f'{표현식:서식}'9.5.1정렬과 폭¶
문자열을 일정한 칸 안에 배치하려면 폭을 지정한다.
<, >, ^는 각각 왼쪽, 오른쪽, 가운데 정렬을 의미한다.
아래 코드에서 대괄호는 폭의 처음과 끝을 보다 명확히 보여주기 위해 사용된다.
s1 = 'hi'
print(f'[{s1:<10}]') # 왼쪽 정렬
print(f'[{s1:>10}]') # 오른쪽 정렬
print(f'[{s1:^10}]') # 가운데 정렬
[hi ]
[ hi]
[ hi ]
남는 칸을 공백이 아닌 다른 문자로 채울 수도 있다. 채움 문자는 정렬 기호 앞에 적는다.
s2 = 'hello'
print(f'{s2:+<10}') # 왼쪽 정렬, 빈칸 대신 +로 채움
print(f'{s2:0>10}') # 오른쪽 정렬, 빈칸 대신 0로 채움
print(f'{s2:-^10}') # 가운데 정렬, 빈칸 대신 -로 채움hello+++++
00000hello
--hello---
9.5.2소수점 자릿수¶
부동소수점을 출력할 때 {값:.nf} 형식을 사용하면 소수점 아래 n자리까지 반올림해서 보여준다.
num1 = 17.153742
num2 = 2.778
print(f'{num1:.1f}')
print(f'{num1:.2f}')
print(f'{num1:.3f}')
print(f'{num2:.2f}')17.2
17.15
17.154
2.78
폭, 정렬, 채우기, 소수점 자릿수 지정을 모두 함께 사용할 수 있다.
print(f'[{num1:10.2f}]')
print(f'[{num2:>010.2f}]')
print(f'[{num1:<10.2f}]')
print(f'[{num2:=^10.2f}]')[ 17.15]
[0000002.78]
[17.15 ]
[===2.78===]
9.5.3예제¶
예제 1
변수 name에 저장된 'Ada'를 10칸 폭에서 왼쪽, 오른쪽, 가운데로 정렬하여 출력하라.
답:
name = 'Ada'
print(f'[{name:<10}]')
print(f'[{name:>10}]')
print(f'[{name:^10}]')[Ada ]
[ Ada]
[ Ada ]
예제 2
정수 7을 네 칸 폭으로 오른쪽 정렬하고, 빈 칸은 0으로 채워 출력하라.
답:
num = 7
print(f'{num:0>4d}')0007
예제 3
두 점수 93.456, 7.8을 전체 폭 8칸, 소수점 아래 첫째 자리까지 출력하라.
답:
score1 = 93.456
score2 = 7.8
print(f'{score1:8.1f}')
print(f'{score2:8.1f}') 93.5
7.8
예제 4
탐사대장이 짧은 보고서를 만든다. 이름 Nora는 8칸 왼쪽 정렬, 거리 23.36778은 10칸 폭에 소수점 둘째 자리까지 출력하라.
답:
name = 'Nora'
distance = 23.36778
print(f'대원:{name:<8}거리:{distance:10.2f}')대원:Nora 거리: 23.37
9.5.4연습문제¶
문제 1
문자열 'hi'를 6칸 폭에서 가운데 정렬하고, 빈 칸은 -로 채워 출력하라.
문제 2
정수 42를 다섯 칸 폭으로 오른쪽 정렬하고, 빈 칸은 0으로 채워 출력하라.
문제 3
부동소수점 -84.99888을 소수점 아래 셋째 자리까지 출력하라.
문제 4
작은 극장의 좌석표를 출력한다. 구역 이름 A는 4칸 가운데 정렬하고 빈 칸은 *로 채운다. 가격 12000.5는 10칸 폭에 소수점 아래 첫째 자리까지 출력하여 한 줄로 보여라.