01
먼저 보는 문법 한 장 — 이 시리즈에 나오는 것만
1장에서는 모든 파이썬 문법을 배우지 않는다. AI를 활용하기 위해 사용되는 문법만 다룬다.
문서를 자르고 검색하는 데 실제로 쓰는 것만 다룬다.

1. 문자열 — 글자를 한 줄로 세운 것
# = 는 "같다"가 아니라 "왼쪽 이름에 오른쪽 값을 넣는다"는 뜻이다
s = "백엔드 개발자는 서버를 다룬다"
# len 은 length(길이). 글자 수를 센다. 공백도 한 글자다
print(len(s))
# 번호로 글자 하나를 꺼낸다. 0부터 센다
print(s[0]) # 0번째 = 첫 글자
print(s[-1]) # 음수는 뒤에서부터. -1 이 마지막
# 콜론(:)을 넣으면 구간이 나온다. 이게 "자르기"다
print(s[0:3]) # 0번부터 3번 "앞"까지 - 끝 번호는 포함되지 않는다
print(s[:3]) # 시작을 비우면 처음부터. 위와 같다
print(s[8:]) # 끝을 비우면 끝까지
print(s[8:9999]) # 길이를 넘겨도 에러가 아니다. 있는 만큼만 준다

#끝 번호가 포함되지 않는 이유
s[0:3] 은 0·1·2 번이다. 3번은 빠진다. 처음엔 어색한데, 이 규칙 덕분에 개수가 그냥 끝 − 시작 으로 나온다.
그리고 s[0:3] 다음에 s[3:6] 을 쓰면 겹치지도 빠지지도 않고 딱 이어진다. 문서를 일정하게 자를 때 이 성질을 쓴다.
2. f-string — 문장 안에 값 넣기
name = "백엔드"
count = 3
# 따옴표 앞에 f 를 붙이면 중괄호 안이 값으로 바뀐다
print(f"{name} 개발자 {count}명")
# 중괄호 안에서는 계산도 되고 함수도 부를 수 있다
print(f"{count + 1}") # 계산
print(f"{len(name)}") # 함수 호출
print(f"{3.14159:.2f}") # 콜론 뒤는 "어떻게 보여줄지"
print(f"[{count:3d}]") # 정수를 3칸에 오른쪽 맞춤
print(f"[{name:6s}]") # 문자열을 6칸에 왼쪽 맞춤

# [ 3] 은 앞에 빈칸 두 개, [백엔드 ] 는 뒤에 빈칸 세 개다. 숫자는 오른쪽, 글자는 왼쪽으로 맞추는 것이 기본값이다. 표를 만들 때 줄이 맞아 보이는 이유가 이것이다.

3. 리스트 — 값을 순서대로 담는 상자
# 대괄호로 만든다. 문자열처럼 번호로 꺼내고 콜론으로 자른다
jobs = ["백엔드", "프론트엔드", "데이터"]
print(len(jobs)) # 문자열에서는 글자 수, 리스트에서는 항목 수
print(jobs[0]) # 0번이 첫 항목인 것도 문자열과 같다
print(jobs[-1]) # 뒤에서 첫 항목
print(jobs[:2]) # 앞의 두 개
# 끝에 하나 붙일 때는 .append() 를 쓴다
jobs.append("기획") # 점(.)은 "이 리스트에게 시키는 일"이라는 표시다
print(jobs)

#리스트를 통째로 찍으면 대괄호와 따옴표가 그대로 보인다. 항목 하나를 찍을 때는 따옴표가 없고, 리스트째 찍을 때는 붙는다. 파이썬이 「이건 문자열이다」를 표시해주는 것이라 생각하면 된다.

4. 딕셔너리 — 이름표를 붙여 담는 상자
중괄호로 만들고 이름과 값을 짝지어 담는다. 리스트가 번호로 꺼낸다면 이쪽은 이름으로 꺼낸다.
# 중괄호로 만들고 이름과 값을 짝지어 담는다
job = {"name": "백엔드", "years": 3}
print(job["name"]) # 대괄호에 번호 대신 이름을 넣는다
job["tool"] = "파이썬" # 없는 이름에 넣으면 새로 생긴다
print(job)
# 없는 이름을 꺼내면 KeyError 가 난다. get 은 대신 None 을 준다
print(job.get("salary"))

#마지막 None 은 「그런 이름이 없다」는 뜻이다. job["salary"] 라고 대괄호로 꺼냈다면 KeyError 로 프로그램이 멈췄을 것이다. .get() 은 없어도 멈추지 않는다.

5. 함수 — 같은 일을 이름 붙여 한 곳에
# def "지금부터 함수를 만든다"
# greet 내가 붙인 이름. 앞으로 이 이름으로 부른다
# (name, title="개발자")
# 밖에서 받을 값. title 은 안 주면 "개발자"를 쓴다(기본값)
# 끝의 콜론 "아래 들여쓴 줄이 이 함수의 몸통"이라는 표시
def greet(name, title="개발자"):
return f"{name} {title}" # return 은 결과를 함수 밖으로 내보낸다
print(greet("김철수")) # title 을 안 줬으니 기본값
print(greet("김철수", "기획자")) # 줬으니 그걸 쓴다
# 일부러 return 을 뺀 함수
def no_return(x):
x + 1 # 계산만 하고 안 내보낸다
print(no_return(1)) # 에러가 아니라 None 이 나온다


6. 반복 — 가장 많이 쓴다
여기가 제일 중요하다. 앞으로 쓰는 코드의 절반이 반복이다.
① for 와 enumerate
jobs = ["백엔드", "프론트엔드", "데이터", "기획"]
# for A in B: "B 에서 하나씩 꺼내 A 에 넣고, 아래 줄을 반복하라"
for j in jobs:
print(j) # 앞의 공백 4칸이 "이 줄은 for 안쪽"이라는 표시다
print("---")
# enumerate 는 번호와 값을 짝지어 준다. 그래서 받는 이름도 두 개
for i, j in enumerate(jobs):
print(i, j)
print("---")
# 번호가 0부터라 사람이 세는 것과 어긋난다. start=1 하나면 해결된다
for i, j in enumerate(jobs, start=1):
print(i, j)

② range — 숫자를 차례로 만든다
목록이 없고 숫자만 필요할 때 쓴다. 문서를 일정한 간격으로 자를 때가 그렇다.
# 목록이 없고 숫자만 필요할 때 쓴다
print(list(range(3))) # 0부터 3 "앞"까지
print(list(range(0, 10, 3))) # 0부터 10 앞까지 3씩 건너뛰며
# range 와 슬라이싱은 끝 번호를 안 넣는 규칙이 같다. 그래서 맞물린다
text = "가나다라마바사아자차카타파하"
for start in range(0, len(text), 5):
print(start, text[start:start + 5])

#이 여섯 줄이 다음 강의의 전부다. 문서를 일정 간격으로 자르는 일이 정확히 이 모양이다. 마지막 조각이 5글자가 안 되는 것도 그대로 나온다 — text[10:15] 인데 글자가 14개까지밖에 없어서 있는 만큼만 나왔다.
③ 딕셔너리 반복 — .items() 를 잊지 않는다
job = {"name": "백엔드", "years": 3, "tool": "파이썬"}
for k in job: # 그냥 돌면 이름만 나온다
print(k)
print("---")
for k, v in job.items(): # .items() 를 붙여야 이름과 값을 짝으로 준다
print(k, "=", v)

#위쪽은 이름만 나왔다. 값이 안 나온다고 딕셔너리가 비었다고 오해하기 쉬운 자리다. .items() 하나로 해결된다
④ 모아 담기와 컴프리헨션
반복은 화면에 찍으려고 도는 게 아니라 결과를 모으려고 돈다.
jobs = ["백엔드", "프론트엔드", "데이터", "기획"]
# 반복은 화면에 찍으려고 도는 게 아니라 결과를 모으려고 돈다
result = [] # 빈 리스트를 먼저 만들고
for j in jobs:
result.append(len(j)) # 하나씩 쌓는다
print(result)
# 위 세 줄을 한 줄로 쓴 것이 컴프리헨션이다
# [ len(j) for j in jobs ]
# 담을 것 어디서 꺼내나
print([len(j) for j in jobs])
# 뒤에 if 를 붙이면 걸러진다
print([j for j in jobs if len(j) >= 4])
# 담는 것이 딕셔너리여도 된다
print([{"name": j} for j in jobs[:2]])

#첫 줄과 둘째 줄이 같다. 반복문 세 줄과 컴프리헨션 한 줄이 정확히 같은 일을 한다는 뜻이다. 컴프리헨션은 새 기능이 아니라 자주 쓰는 반복문의 줄임말이다.

7. 판단 — 참인지 묻기
s = "백엔드 개발자는 서버를 다룬다"
print("서버" in s) # in 은 "안에 있나"를 묻는다
print("디자인" in s)
print(3 == 3) # == 는 "같은가". 값을 넣는 = 와 다르다
# 빈 것은 거짓이다. 이 성질을 자주 쓴다
print(not []) # 빈 리스트
print(not "") # 빈 문자열
paths = []
if not paths:
print("찾은 게 없다")



'AI' 카테고리의 다른 글
| 0810 디코드랩 정리(AI Engineering 06) (0) | 2026.08.11 |
|---|---|
| 0810 디코드랩 정리(AI Engineering 05) (0) | 2026.08.11 |
| 0810 디코드랩 정리(AI Engineering 04) (0) | 2026.08.10 |
| 0810 디코드랩 정리(AI Engineering 03) (0) | 2026.08.10 |
| 0810 디코드랩 정리(AI Engineering 02) (0) | 2026.08.10 |