문자열 다루기
파이썬은 "Python"의 글자 위치를 0부터 셉니다. 그래서 "Python"[5]가 마지막 글자 n이고, "Python"[6]은 오류입니다.
이름표 한 장에도 글자 조각을 이어 붙입니다
체험 학습이나 동아리 첫 모임에서 나눠 주는 이름표를 떠올려 보세요. 모양은 모두 같고 이름만 다르니, 틀 하나로 전부 찍어 낼 수 있습니다. 파이썬에서 글자는 문자열이고, 조각을 모아 문자열을 만드는 가장 빠른 방법은 f-문자열입니다. 여는 따옴표 앞에 f를 붙이고 중괄호 안에 변수 이름을 쓰면, 파이썬이 {이름} 자리에 그 변수의 값을 넣어 줍니다.
name = "민아"
club = "로봇 동아리"
print(f"안녕하세요, {name}님!")
print(f"{name}님이 {club}에 들어왔습니다.")안녕하세요, 민아님!
민아님이 로봇 동아리에 들어왔습니다.글자를 잇는 방법이 두 가지 더 있습니다. +는 문자열 끝과 끝을 이어 붙이고, *는 문자열을 여러 번 되풀이합니다. 다만 +의 양쪽은 모두 문자열이어야 해서, 수를 붙이려면 str()로 먼저 글자로 바꿔야 합니다. f-문자열은 이 변환을 알아서 해 주기 때문에 요즘은 f-문자열을 가장 많이 씁니다.
item = "gimbap"
count = 2
print(item + " x " + str(count))
print("-" * 12)
print(f"{item} x {count}")gimbap x 2
------------
gimbap x 2글자마다 0부터 시작하는 번호가 있습니다
문자열은 글자가 한 줄로 늘어선 것이고, 글자마다 인덱스라는 위치 번호가 있습니다. 첫 글자의 번호는 1이 아니라 0입니다. 대괄호로 글자 하나를 꺼내는데, word[0]이 첫 글자입니다. 음수 인덱스는 뒤에서부터 세므로 word[-1]은 길이와 상관없이 언제나 마지막 글자입니다. len()은 띄어쓰기와 문장 부호까지 포함한 글자 수를 알려 줍니다.
word = "Python"
print(word[0], word[5], word[-1])
print(len(word))
print(word[0:2], word[2:])
print(len("김밥천국"), "김밥천국"[0:2])P n n
6
Py thon
4 김밥word[0:2]는 슬라이스입니다. 인덱스 0에서 시작해 인덱스 2 바로 앞에서 멈추므로 "Py"가 됩니다. word[2:]처럼 끝 번호를 비우면 문자열 끝까지 잘라 옵니다. 끝 번호 바로 앞에서 멈추는 규칙이 처음엔 어색하지만, 덕분에 word[0:2] + word[2:]는 언제나 원래 낱말과 같아집니다. 한글도 한 글자가 하나로 세어져서 len("김밥천국")은 4입니다.
문자열 메서드는 새 문자열을 돌려줍니다
문자열에는 점(.) 뒤에 붙여 쓰는 메서드라는 도구가 들어 있습니다. upper()와 lower()는 대문자와 소문자를 바꾸고, replace(바꿀 것, 새것)는 어떤 글자를 모두 다른 글자로 바꾸며, strip()은 양 끝의 빈칸을 지웁니다. 회원 가입 칸에 실수로 띄어쓰기를 넣었을 때 쓸모가 있습니다. in은 한 문자열이 다른 문자열 안에 있는지 확인해 True나 False를 줍니다. 이 메서드들은 원래 문자열을 고치지 않습니다. 문자열은 한번 만들면 바꿀 수 없고, 메서드는 새 문자열을 만들어 돌려줄 뿐이라서 결과를 쓰려면 변수에 다시 넣어야 합니다.
menu = " tteokbokki "
clean = menu.strip()
print(clean.upper())
print(clean.replace("k", "K"))
print("bok" in clean, len(menu), len(clean))TTEOKBOKKI
tteoKboKKi
True 14 10문자열 안에 따옴표를 넣고 싶으면 바깥을 다른 종류의 따옴표로 감쌉니다. "It's fine"처럼 씁니다. 역슬래시(\, 한글 글꼴에서는 ₩로 보이기도 합니다)는 특수 문자의 시작입니다. 문자열 안의 \n은 「여기서 줄을 바꾸라」는 뜻이라서 print 한 번으로 두 줄을 출력할 수 있습니다.
print("It's lunch time.")
print("Line one\nLine two")It's lunch time.
Line one
Line two| f-문자열 | f"...{name}..."처럼 값을 글자 안에 넣음 |
| 인덱스 | 0부터 시작하는 글자의 위치 번호 |
| 슬라이스 | s[a:b]: a부터 b 바로 앞까지 |
| len() | 문자열의 글자 수 |
| 메서드 | s.upper()처럼 점 뒤에 쓰는 도구 |
| \n | 줄 바꿈을 뜻하는 특수 문자 |
| in | "a" in "cat"은 True |
- 무엇이 출력될까요?
word = "banana" print(word[1]) - 무엇이 출력될까요?
word = "banana" print(word[-2]) - 무엇이 출력될까요?
print(len("Hi there!")) - 무엇이 출력될까요?
word = "school" print(word[1:4]) - 무엇이 출력될까요?
name = "Jun" print(f"Hi {name}, you are {13 + 1}.") - 무엇이 출력될까요?
print("ab" * 3) - 무엇이 출력될까요?
s = "hello" s.upper() print(s)HELLOhelloHelloAn error
- 무엇이 출력될까요?
print("rice" in "fried rice") - 무엇이 출력될까요?
name = "Mina" print(f"{name}") print("{name}")Mina
MinaMina
{name}{name}
Mina{name}
{name}
- 무엇이 출력될까요?
print("Total: " + str(3 * 1000))Total: 3000Total: 3 * 1000Total: 31000An error
- 「첫 글자는 word[1]이다.」 인덱스는 0부터 시작하므로 word[1]은 둘째 글자입니다. 쓸 수 있는 마지막 번호는 len(word) - 1이고, "Python"[6]은 IndexError: string index out of range를 냅니다.
- 「"Age: " + 15라고 쓰면 Age: 15가 나온다.」 문자열과 정수는 +로 이을 수 없습니다. TypeError: can only concatenate str (not "int") to str가 납니다. str(15)나 f-문자열을 쓰세요.
- 「word[0] = "J"로 첫 글자만 고칠 수 있다.」 문자열은 그 자리에서 바꿀 수 없어서 TypeError: 'str' object does not support item assignment가 납니다. "J" + word[1:]처럼 새 문자열을 만드세요.
- f"...{x}..."로 값을 글자 안에 넣음.
- 인덱스는 0부터, -1은 마지막 글자.
- s[a:b]는 a부터 b 바로 앞까지.
- upper() 같은 메서드는 새 문자열을 돌려주고 원래 문자열은 그대로.
- "\n"은 문자열 안의 줄 바꿈.
이 과정의 출처 (6)
- Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
- Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
- Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
- General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
- Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
- Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)
확인한 날: 2026-10-19