1교시: 입출력 (Input / Output)
1) print(sep=..., end=...)로 출력 모양 바꾸기
sep : 여러 값을 출력할 때 사이에 들어갈 구분자
print("A", "B", "C", sep="-")

end : 출력이 끝난 뒤 자동으로 붙는 문자열 (기본은 줄바꿈 \n)
print("사과", end=" / ")
print("바나나", end=" / ")
print("포도")

2) f-string & format으로 문자열에 값 넣기
- f-string (권장): 가독성 좋고 실무에서 가장 많이 사용
- format() : 예전 방식, 이해용
name = "민수"
age = 25
print(f"이름은 {name}이고 나이는 {age}살입니다.")
print("이름은 {}이고 나이는 {}살입니다.".format(name, age))

3) input()은 항상 문자열이다
- input() 결과는 무조건 str
- 숫자로 계산하려면 int(), float() 변환 필요
num = input("숫자를 입력하세요: ")
print(type(num))
num = int(num)
print("입력값을 정수형으로 변환 후 값에 + 10: ", num + 10)

4) split() + map(int, ...) 한 줄 입력
4-1) split()이란?
split은 문자열을 쪼개서 여러조각으로 만드는 기능입니다.
예를 들어:
- "10 20 30".split() → ["10", "20", "30"] (공백 기준)
- "a,b,c".split(",") → ["a", "b", "c"] (쉼표 기준)
print("10 20 30".split())
print("a,b,c".split(","))
print("Read#Analyze#Implement".split("#"))

4-2) map(int, ...)란?
쪼갠 결과는 보통 문자열입니다.
map(int, ...)는 각 조각에 int()를 한 번에 적용합니다.
a, b = map(int, input().split())
a, b = map(int, "3 7".split())
print("a+b =", a + b)

# split(',') 결과에 공백이 남을 수 있습니다
따라서 습관적으로 strip()를 하는것이 좋습니다.
5) try/except로 입력 오류 방지
만약 사용자가 맞지 않은 값을 입력한경우 프로그램이 멈추며 에러가 날수 있습니다.
이때 프로그램이 멈추지 않게하면서 오류가 났다 알리는 방법으로 try/except를 사용합니다.
try:
num = int(input("숫자 입력: "))
print(num * 2)
except:
print("숫자를 입력해야 합니다.")

2교시: 변수 (Variables)
1) 변수 이름 짓기 (Naming) — 실수 방지 1순위
기본 규칙
- 영어/숫자/밑줄(_)만 사용
- 숫자로 시작하면 안 됨
- 중간에 공백 불가
- 대소문자 구분: Score와 score는 다름
- 예약어 사용 금지 ( if, for, def 등)
이를 지키지 않으면 에러가 발생합니다.
2) 동적 타이핑(Dynamic Typing)과 type()
동적 타이핑이란...
변수의 자료형이 “이름표에 붙어있는” 것이 아니라, 저장한 값에 따라 달라지는것을 의미합니다.
예:
- x = 10 → x는 int(정수)
- x = "10" → x는 str(문자열)
- x = 3.14 → x는 float(실수)
이게 편리하지만, “문자열 숫자"와 "진짜 숫자”를 헷갈리기 쉬우므로 type() 확인이 중요합니다.
print(type(10))
print(type(3.14))
print(type("적토마"))

3) 형변환: int(), float(), str()
형변환은 “타입을 바꾸는 것”입니다.
print(int("10") + 5)
print(float("3.5") + 1.2)
n = 50
print("점수는 " + str(n) + "점입니다.")

4) 산술 연산과 할당 패턴
4-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)
# / 연산자는 계산 결과를 정확하게 표현하기 위해 항상 float로 결과를 반환한다.

5) 다중할당과 동일 값 할당
5-1) 다중할당
한 줄에서 여러 변수에 값을 넣을 수 있습니다.
a, b = 1, 2
print(a, b)
a, b = b, a
print(a, b)

서로의 값을 바꿀수도 있습니다.
5-2) 동일값 할당
여러 변수에 같은 값을 한 번에 넣을 수 있습니다.
x = y = z = 0
print(x, y, z)

3교시: 문자열(Strings) — 아주 기초부터
1) 문자열은 불변(immutable)
- 원본은 변경 할수 없다.
- 새 문자열 생성 후 재할당
2) 인덱싱(Indexing)과 슬라이싱(Slicing)
문자열의 각 글자에는 번호(인덱스) 가 있습니다.
예: s = "Python"
- s[0] → "P" (첫 글자)
- s[1] → "y"
- s[5] → "n" (마지막 글자)
그리고 뒤에서부터도 셀 수 있습니다:
- s[-1] → 마지막 글자
- s[-2] → 뒤에서 두 번째
s = "Python"
print("s[0] =", s[0])
print("s[1] =", s[1])
print("s[-1] =", s[-1])
print("s[-2] =", s[-2])

2-1) 슬라이싱: 부분을 잘라내기
슬라이싱 기본 형태: 문자열[start : end]
- start 포함
- end는 포함하지 않음
s = "Python"
print(s[0:2])
print(s[2:6])
print(s[:2]) # start 생략 = 처음부터
print(s[2:]) # end 생략 = 끝까지

2-2) step(간격)까지 포함한 다양한 슬라이싱
형태: 문자열[start : end : step]
- step=2면 한 글자씩 건너뜁니다.
- step=-1이면 뒤집습니다.
x = "abcdefghijklmnop"
print(x[0:-1:2])

s = "abcdefg" #[start:end:step]
print("[::-1] 뒤집기:", s[::-1])

s = "Python"#[start:end:step]
print("[::-2] 뒤에서 2칸씩:", s[::-2])

s = "abcdefg" #[start:end:step]
print("[1::2] 1번부터 2칸씩:", s[1::2])

s = "abcdefg"#[start:end:step]
print("[-5:] 뒤에서 5글자:", s[-5:])

s = "0123456789"#[start:end:step]
print("[::2] 짝수 인덱스:", s[::2])
print("[1::2] 홀수 인덱스:", s[1::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("#"))

# (자주 쓰는 패턴) split 전에 strip
line = " 10, 20, 30 "
parts = [p.strip() for p in line.strip().split(",")]
print(parts)
# 사용자가 실수로 넣은 앞뒤 공백까지 고려해서 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))

- split() : 문자열 → 리스트
- join() : 리스트 → 문자열
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() : 없으면 에러 발생
| 함수 | 핵심 목적 | 입력 대상 | 반환 타입 | 전처리에서의 역할 | 주의할 점 |
| strip() | 앞뒤 공백 제거 | 문자열 | 문자열 | 입력 데이터 정제 |
중간 공백은 제거 안 됨
|
| lstrip() | 왼쪽 공백 제거 | 문자열 | 문자열 | 형식 오류 방지 |
지정 문자도 제거 가능
|
| rstrip() | 오른쪽 공백 제거 | 문자열 | 문자열 | 파일/입력값 정제 |
지정 문자도 제거 가능
|
| lower() | 소문자로 변환 | 문자열 | 문자열 | 비교 정확도 향상 |
원본 문자열 변경 ❌
|
| upper() | 대문자로 변환 | 문자열 | 문자열 | 카테고리 값 통일 |
원본 문자열 변경 ❌
|
| replace() | 특정 문자 치환 | 문자열 | 문자열 | 불필요한 문자 제거 | 대소문자 구분함 |
| split() | 문자열 분리 | 문자열 | 리스트(list) | 정보 분해 | 결과는 리스트 |
| join() | 문자열 결합 | 문자열 + 리스트 | 문자열 | 가공 후 재결합 |
리스트 요소는 문자열만 가능
|
| count() | 특정 문자열 개수 세기 | 문자열 | 정수(int) | 패턴 빈도 파악 |
겹치는 문자열은 중복 계산 ❌
|
| find() | 위치 찾기 | 문자열 | 정수(int) | 존재 여부 확인 | 없으면 -1 반환 |
'A.Today I Learne > 파이썬' 카테고리의 다른 글
| [TIL] 파이썬 5일차 (0) | 2026.01.14 |
|---|---|
| [TIL] 파이썬 4일차 (0) | 2026.01.12 |
| [TIL] 파이썬 3일차 (1) | 2026.01.09 |
| [TIL] 파이썬 2일차 (0) | 2026.01.07 |
