STEP 1. 입출력에 대해
1) 출력: print()
print()는 화면에 보여주는 함수입니다.
print()
1-1) sep 옵션: 값과 값 “사이”에 넣을 문자
sep 옵션은 일종의 구분자 (separator)입니다.
여러 값을 출력할 때 값 사이에 어떤 문자를 넣을지 정합니다.
# 기본형태
sep = "구분자"
print("A", "B", "C", sep="-")
print(2026, 1, 4, sep="/")
print("사과", "바나나", "포도", sep=", ")
print("2", "0", "2", "6", sep="")

1-2) end 옵션: 출력의 “끝”에 붙는 것
print()는 기본으로 출력이 끝나면 줄바꿈을 합니다.
이 자동 줄바꿈을 담당하는 것이 바로 end 옵션입니다.
print("첫째", end=" ")
print("둘째", end=" ")
print("셋째")

print("사과", end=" / ")
print("바나나", end=" / ")
print("포도")

2) 문자열 채우기: format() vs f-string
2-1) format() 방식
문자열 안에 {}를 만들고, 뒤에서 .format(...)로 채웁니다.
name = "적토마"
score = 95
print("{}의 점수는 {}점입니다.".format(name, score))

2-2) f-string 방식
문자열 앞에 f를 붙이고, {변수}처럼 바로 넣습니다.
name = "적토마"
score = 95
print(f"{name}의 점수는 {score}점입니다.")

2-3) 다양한 f-string 방식
money = 1234567
print(f"가격은 {money:,}원입니다.")
pi = 3.141592
print(f"원주율은 {pi:.2f}입니다.")
big = 1234567.891
print(f"큰 수: {big:,.2f}")

3) 입력: input()
input()은 사용자가 키보드로 입력한 내용을 가져오는 함수입니다.
⚠️ input()의 결과는 무조건 문자열(str) ⚠️
x = input("아무거나 입력해 보세요: ")
print("입력한 값:", x)
print("type(자료형):", type(x))


3-1) 문자열의 형태변환
int(), float(), str()을 사용해 문자열의 타입을 바꿀수 있다.
print(int("-7") - 3)
print(float("3.5") + 1.2)
# 과학 표기(자주 보임): 1e3 = 1000.0
print(float("1e3"))

3-2) 주의사항!
3-2-1)소수 형태의 문자열을 정수형으로 만들고 싶다면 반드시 실수형으로 바꾼뒤에 정수형으로 바꾸기!!
a = int("3.14") # 오류 발생
a= int(float("3.14")))
"3.14"에서 3.14는 실수이기 때문에 곧바로 정수형으로 바꿀수가 없다.
따라서 먼저 float으로 형태를 변형한 후에 int으로 형태를 바꿔야한다.
4) try/except
만약 사용자가 잘못된 값을 입력해 에러가 발생한 경우...
try/except를 사용해 프로그램을 멈추지 않고 에러가 발생했다는것을 알릴수도 있다.
# 기본형태
try:
시행문....
except 에러 종류:
에러 발생시 시행문
# 예제 1: 정수 변환 실패를 잡기
s = input("정수를 입력하세요: ")
try:
n = int(s)
print("n * 2 =", n * 2)
except ValueError:
print("숫자가 아니라서 변환에 실패했습니다!")

# 예제 2: 0으로 나누기 에러도 잡기
s = input("정수 2개를 공백으로 입력하세요(예: 10 0): ")
try:
a, b = map(int, s.split())
print("a / b =", a / b)
except ValueError:
print("입력 형식이 잘못되었습니다! 예: 10 3")
except ZeroDivisionError:
print("0으로는 나눌 수 없습니다!")

5) 한 줄에서 여러 값 입력받기: split() + map()
5-1) split()이란?
문자열을 쪼개 여러조각으로 만드는 기능
split('기준자') # 기준자 기준으로 문자열을 쪼갠다.
split() # 공백을 기준으로 문자열을 쪼갠다.
split(',') # 쉼표 기준으로 쪼갠다.
split('#') # # 기준으로 쪼갠다.
print("Read#Analyze#Implement".split("#"))

# split()으로 나눌때 공백이 발생할때가 있다. 이럴땐 strip 혹은 replace를 사용해 공백을 지울수도 있다.
# 공백이 거슬리면 strip()으로 정리할 수 있습니다.
parts = "10, 20, 30".split(",")
clean = [p.strip() for p in parts]
print(clean)

5-1) map()이란?
split의 결과 대부분은 문자열이다.
때문에 나눈 문자열들을 계산에 사용하기 위해선 형태를 변환해야 하는데
이를 간편하게 해줄수 있는것이 바로 map()이다.
num = map(변수형태(생략가능), 바꿀변수)
a, b = map(int, "3 7".split())
print("a+b =", a + b)
a, b = map(float, "3 7".split())
print("a+b =", a + b)

6) STEP 1. 입출력에 대해 되돌아보기
- print(sep=..., end=...)로 출력 모양을 바꿀 수 있습니다.
- f-string과 format으로 문자열에 값을 채워 넣을 수 있습니다.
- input()은 항상 문자열이므로 숫자로 쓰려면 변환이 필요합니다.
- split()과 map(int, ...)로 한 줄에서 여러 숫자를 읽을 수 있습니다.
- try/except로 입력이 이상해도 프로그램이 멈추지 않게 만들 수 있습니다.
STEP 2. 변수에 대해
변수란...
변하는 값, 또는 특정값을 저장하는 공간이다.
수학으로 설명하면 x, y와 같은 임의의 값이라 할수 있다.
- 값(Value): 10, 3.14, "안녕하세요" 같은 실제 데이터
- 변수(Variable): 그 값을 저장해두고 다시 쓰기 위한 이름
1) 변수 이름 짓기 (Naming) — 실수 방지 1순위
변수 이름을 잘못 지을 경우...
- 에러 발생
- 코드가 읽기 어려워 나중에 다시봐도 이해 못함
1-1) 기본 규칙(중요)
- 영어/숫자/밑줄(_)만 사용
- 대소문자 구분: Score와 score는 다름
- 숫자로 시작하면 안 됨
- 중간에 공백 불가(공백 표현시 _ 만 사용)
1-2) 예약어(키워드)는 변수 이름 사용 불가
if, for, def, class, return, True, False, None ...
등과 같은 문법으로 사용되는 단어들은 사용 금지
1-3) 좋은 변수명 vs 나쁜 변수명
- 나쁜 예: a, b, x1 (의미가 안 보임)
- 좋은 예: width, height, area (읽자마자 의미가 보임)
# 예제 1: 나쁜 변수명
a = 3
b = 5
c = a * b
print("결과:", c)ㅊ
# 예제 2: 좋은 변수명
width = 3
height = 5
area = width * height
print("넓이:", area)
# 예제 3: 의미가 있으면 디버깅(고치기)도 쉬워집니다
student_name = "적토마"
math_score = 90
english_score = 80
total_score = math_score + english_score
print(student_name, "총점:", total_score)
2) 동적 타이핑(Dynamic Typing)과 type()
파이썬은 동적 타이핑 언어입니다.
즉, 변수의 자료형이 “이름표에 붙어있는” 것이 아니라, 저장한 값에 따라 달라집니다.
예:
x = 10 → x는 int(정수)
x = "10" → x는 str(문자열)
x = 3.14 → x는 float(실수)
이게 편리하지만, “문자열 숫자"와 "진짜 숫자”를 헷갈리기 쉬우므로 type() 확인이 중요합니다.
a = "123"
b = 123
print(a, type(a))
print(b, type(b))

# 이때 "123"은 숫자처럼 보여도 문자열이다. 숫자와는 다르계 연산이 불가능 하니 기억할것,
2-2) 형변환: int(), float(), str() (각각 예제 3개 이상)
형변환은 데이터의 타입을 바꾸는 것이다.
- int("10") → 10
- float("3.14") → 3.14
- str(10) → "10"
특히 input()은 항상 문자열이므로, 숫자 계산을 하려면 int()나 float()가 필요하다.
print(int("10") + 5)
print(float("3.5") + 1.2)
n = 50
print("점수는 " + str(n) + "점입니다.")

3) 산술 연산과 할당 패턴
3-1) 기본 산술 연산
| + 더하기 - 빼기 * 곱하기 / 나누기 |
a = 12
b = 5
print("a + b =", a + b)
print("a - b =", a - b)
print("a * b =", a * b)
print("a / b =", a / b)

파이썬에서는 수학에서 적용되는 대부분의 규칙이 적용된다.
# 괄호 먼저 계산
print((2 + 3) * 4)
# 음수도 가능
temp = -3
print(temp * 10)
# 실수 계산
x = 1.5
y = 2.0
print(x * y)

3-2) 다중 할당과 동일 할당
한 줄에서 여러 변수에 값을 넣을 수 있다.
a, b = 1, 2
서로 바꾸기: a, b = b, a
x, y, z = 10, 20, 30
print(x, y, z)
# swap(바꾸기)
a, b = 100, 200
a, b = b, a
print(a, b)

여러 변수에 같은 값을 한 번에 넣을 수 있다.
a = b = 10
a = a + 5
print("a:", a, "b:", b)
c = d = "hi"
print(c, d)

4) STEP 2. 변수에 대해 되돌아보기
- 변수는 값을 저장하는 “이름표”입니다. =는 저장(대입)입니다.
- 변수명은 의미 있게, snake_case로, 숫자 시작/예약어를 피합니다.
- 파이썬은 동적 타이핑이며, type()으로 자료형을 확인할 수 있습니다.
- + - * / 연산을 하고, 다중 할당/동일 값 할당을 활용할 수 있습니다.
STEP 3. 문자열에 대해
문자열은 간단하게 말해 글자드르이 모임입니다.
- "안녕하세요"
- "Python"
- "123" (이건 “숫자처럼 보이지만” 글자입니다)
보통은 " "안에 묶여있으면 문자열입니다.
s1 = "Python"
s2 = "123"
print(s1, type(s1))
print(s2, type(s2))

3-1) 문자열은 불변성을 지닌다.
“불변성을 지녔다란 의미는 한 번 만든 문자열은 ‘그 자리에서’ 수정할 수 없다는 뜻이다.
예를 들어, "hello"에서 첫 글자 h를 H로 바꾸고 싶다고 해보자.
word = "hello"
word[0] = "H" # 에러 발생
문자열은 수정이 불가능한 타입이기에 해당 코드는 에러가 발생한다.
때문에 문자열을 수정하고 싶다면, 새 문자열 변수를 만들거나 재할당을 해야 한다
2) 인덱싱과 슬라이싱
문자열의 각 글자에는 번호(인덱싱)이 존재한다.
예: s = "Python"
- s[0] → "P" (첫 글자)
- s[1] → "y"
- s[5] → "n" (마지막 글자)
- s[-1] → 마지막 글자
- s[-2] → 뒤에서 두 번째
⚠️왜 0부터 시작하나?
“몇 번째” 보다 “시작점에서 얼마나 떨어져 있는가”로 생각하자
- 첫 번째 값 → 0칸 떨어짐 → index 0
- 두 번째 값 → 1칸 떨어짐 → index 1
이 규칙은 추후에 배우게될 리스트, 튜플 전부 동일하다.
2-1) 슬라이싱
문자열(또는 리스트)에서 원하는 “부분”을 잘라서 새 문자열을 만드는 방법
문자열[start : end : step]
s = "Python"
print(s[0:2])
print(s[2:6]) # 부분 추출
print(s[:2]) # start 생략 = 처음부터
print(s[2:]) # end 생략 = 끝까지
print("[1::2] 0번부터 2칸씩:", s[0::2])
num = "0123456789"#[start:end:step]
print("[::2] 짝수 인덱스:", num[::2])
print("[1::2] 홀수 인덱스:", num[1::2])
print("[::-1] 뒤집기:", s[::-1])
print("[::-2] 뒤에서 2칸씩:", s[::-2])

3) 문자열 전처리(정리) 메소드
3-1) 공백 제거: strip(), lstrip(), rstrip()
문자열 앞뒤 공백은 눈에 안 보이지만 실제 데이터에는 존재한다.
해당 공백을 지우는 방법은 다음과 같다.
# 이때 strip()은 중간 공백은 제거하지 않는다
- strip() : 양쪽(왼쪽+오른쪽) 공백 제거 (중간 공백은 지울수 없음.)
- lstrip() : 왼쪽 공백만 제거
- rstrip() : 오른쪽 공백만 제거
text = " hello "
print("원본:", repr(text))
print("strip:", repr(text.strip()))
print("lstrip:", repr(text.lstrip()))
print("rstrip:", repr(text.rstrip()))

strip으로 특정 문자를 지울수도 있다.
# 특정 문자도 제거할 수 있습니다(양쪽에서만)
text = "###title###"
print(text.strip("#"))

3-2) 대소문자 통일: lower(), upper()
대소문자 통일 해 비교 정확도를 높이기 위한 전처리
s = "PyThOn"
print(s.lower())
print(s.upper())

3-3) 바꾸기: replace(old, new)
replace()는 특정 문자열을 다른 문자열로 치환
조건을 만족하면 모든 위치에서 치환하며 부분 문자열도 대상이 될 수 있다.
s = "I like apple"
print(s.replace("apple", "banana"))

3-4) 나누기/합치기: split()과 join()
split() : 문자열을 구분자(괄호 안에 있는 값) 기준으로 리스트로 분리한다.
s = "a b c"
a = "10,20,30"
print(s.split())
print(a.split(","))

join() : 리스트를 문자열 함수로 하나로 합치기
반드시 문자열 요소만 있는 리스트여야 함
words = ["I", "like", "python"]
print(" ".join(words))

3-5) 개수/위치 찾기: count(), find()
count(sub) : 부분 문자열이 몇 번 나오는지
s = "banana"
print(s.count("a"))
print(s.count("na"))

find(sub) : 부분 문자열의 “처음 위치(인덱스)”를 찾습니다. 없으면 -1
s = "Hello Python"
print(s.find("Python"))
print(s.find("Java")) # 없으면 -1

둘 다 문자열에서 위치(index)를 찾는 함수이지만...
차이점:
find() : 없으면 -1 반환
index() : 없으면 에러 발생
3-6) 문자열 메소드 표로 한눈에 보기
| 함수 | 핵심 목적 | 입력 대상 | 반환 타입 | 전처리에서의 역할 | 주의할 점 |
| strip() | 앞뒤 공백 제거 | 문자열 | 문자열 | 입력 데이터 정제 |
중간 공백은 제거 안 됨
|
| lstrip() | 왼쪽 공백 제거 | 문자열 | 문자열 | 형식 오류 방지 |
지정 문자도 제거 가능
|
| rstrip() | 오른쪽 공백 제거 | 문자열 | 문자열 | 파일/입력값 정제 |
지정 문자도 제거 가능
|
| lower() | 소문자로 변환 | 문자열 | 문자열 | 비교 정확도 향상 |
원본 문자열 변경 ❌
|
| upper() | 대문자로 변환 | 문자열 | 문자열 | 카테고리 값 통일 |
원본 문자열 변경 ❌
|
| replace() | 특정 문자 치환 | 문자열 | 문자열 | 불필요한 문자 제거 | 대소문자 구분함 |
| split() | 문자열 분리 | 문자열 | 리스트(list) | 정보 분해 | 결과는 리스트 |
| join() | 문자열 결합 | 문자열 + 리스트 | 문자열 | 가공 후 재결합 |
리스트 요소는 문자열만 가능
|
| count() | 특정 문자열 개수 세기 | 문자열 | 정수(int) | 패턴 빈도 파악 |
겹치는 문자열은 중복 계산 ❌
|
| find() | 위치 찾기 | 문자열 | 정수(int) | 존재 여부 확인 | 없으면 -1 반환 |
4) STEP 3. 문자열에 대해 되돌아보기
- 문자열은 불변(immutable)이라서, 바꾸려면 새 문자열을 만들어 재할당해야 합니다.
- 인덱싱/슬라이싱으로 부분 문자열을 정확히 뽑을 수 있습니다.
- strip/lower/replace/split/join/count/find를 전처리에 맞게 사용할 수 있습니다.
- find는 실패 시 -1, index는 실패 시 예외라는 차이를 알고 선택할 수 있습니다.
만약 부족하다면 어느 부분이?
문자열 메소드에 대한 이해.
- 여러가지 기능들이 있기에 한번에 외우기는 불가능. 때문에 여러 문제를 풀어보며 익히기.
'B.Review > 파이썬 라이브 세션' 카테고리의 다른 글
| [Python Study] 파이썬 5일차~문푸날 (1) | 2026.01.15 |
|---|---|
| [Python Study] 파이썬 4일차~문푸날 (0) | 2026.01.13 |
| [Python Study] 파이썬 3일차~문푸날 (0) | 2026.01.11 |
| [Python Study] 파이썬 2일차~문푸날 (0) | 2026.01.08 |
