## 🐍 파이썬, 질문하며 배우기

학생이 먼저 LLM에게 묻고 → 직접 실행하고 → 선생님이 정리합니다.
중·고등 · 구글 미트 화상 수업 · 브라우저에서 코드 실행 (파이참 불필요)

👤 님 · 이 강의 세션에 연결되어 진도·퀴즈가 자동 저장됩니다
⚠️ edu-pro 「내 수업」을 통해 접속하면 진도·퀴즈가 저장됩니다 (지금은 게스트 모드)

## 이 수업은 이렇게 진행돼요

교안에 정답이 바로 적혀 있지 않습니다. AI에게 물어보고, 아래 실행기에서 확인한 뒤, 화상 수업에서 선생님과 핵심만 정리합니다.

🤖

### STEP 1. 질문하기

교안 질문을 챗봇에 복사해 물어봅니다. 수업 전 선행 권장.

🔍

### STEP 2. 직접 해보기

코드를 베끼지 말고 실행기에서 직접 타이핑·실행합니다.

👩‍🏫

### STEP 3. 선생님 리뷰

구글 미트에서 핵심 문법과 AI가 틀린 부분을 함께 정리합니다.

학습 설계
· 앞쪽: 쉬운·고전적 표현 (%, for, def, open)
· 뒤쪽: 같은 기능의 고급 표현을 모아 리마인드 (f-string, 컴프리헨션, 람다, 데코레이터, async…)
⚠️ AI는 가끔 틀린 답을 자신 있게 말합니다. “AI가 그렇다고 했으니 맞다”가 아니라, 직접 실행해서 확인하는 것이 목표입니다.

## 전체 커리큘럼

장 | 주제 | 핵심 + 뒤에 모을 고급 표현
--- | --- | ---
1 | 파이썬과 첫 만남 | 변수·숫자·문자열·% 포맷·인덱싱·리스트
2 | 제어문과 입출력 | 연산자·if·for/while·입출력
3 | 자료구조·함수·파일 | 튜플·dict·set·함수·파일 · f-string 리마인드
4 | OOP · 고급 표현 | 클래스·상속·모듈·예외 · 컴프리헨션·람다·데코레이터·async
5 | 자기주도 프로젝트 | 데이터 분석·코드 리뷰·미니 프로젝트

## 1장. 파이썬과 첫 만남

설치·IDE 없이, 이 페이지의 실행기만으로 시작합니다.

### 1-1. 파이썬은 대체 왜 배울까?

🤖 AI에게 물어보자

    파이썬이 어떤 프로그래밍 언어인지, 자바·C와 비교해 어떤 점이 다른지 설명해줘. 파이썬으로 만들 수 있는 것 3가지도 예시로 알려줘.

💡 ‘왜 초보자에게 파이썬을 추천하는지’ 한 문장으로 정리해 보세요.

#### 직접 해보기

1. 아래 실행기에서 print 문을 실행해 보세요.
2. PRINT (대문자)로 바꾸면 어떻게 되는지 확인하세요.

#### 퀴즈

다음 중 오류가 나는 것은?
`print(1)` / `PRINT(1)` / `print(1+1)`
→ 정답: PRINT(1) (대소문자 구분)

🐍 Python 실행기 ○ 로딩 중…
print("Hello, Python") print(1 + 1) # PRINT("Hello") # 대문자로 바꾸면?
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰 · 핵심 정리

1. 파이썬은 인터프리터 언어라 한 줄씩 바로 실행할 수 있습니다.
2. 들여쓰기가 문법의 일부입니다 (다른 언어의 { } 역할).
3. 이름은 대소문자를 구분합니다 (print ≠ PRINT).

AI가 파이썬 2 문법(괄호 없는 print)을 섞어 줄 수 있습니다. 우리는 항상 print()를 씁니다.

### 1-2. 숫자와 변수

🤖 AI에게 물어보자

    파이썬 산술 연산자 +, -, *, /, %, //, ** 의 의미를 예시와 함께 설명해줘. 특히 / 와 // 차이를 알려줘. 변수 이름 규칙도 설명해줘.

🐍 숫자 · 연산 실습 ○ 로딩 중…
a = 10 b = 3 print('a / b =', a / b) # 실수 나눗셈 print('a // b =', a // b) # 몫 print('a % b =', a % b) # 나머지 print('a ** b =', a ** b) # 거듭제곱 print(type(a))
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰

1. `/`는 실수, `//`는 몫(정수 나눗셈)입니다.
2. 변수 이름은 숫자로 시작하거나 예약어(class, def, if…)를 쓸 수 없습니다.
3. 타입을 미리 적지 않습니다. a = 10 이면 정수로 취급됩니다.

### 1-3. 문자열과 인덱싱 / 슬라이싱

🤖 AI에게 물어보자

    파이썬 문자열을 만드는 방법(작은따옴표, 큰따옴표, 삼중따옴표)과 인덱싱·슬라이싱을 a = 'I love Python' 예시로 설명해줘.

🐍 문자열 실습 ○ 로딩 중…
a = 'I love Python' print(a[0]) # I print(a[-1]) # n print(a[2:6]) # love (끝 미포함) print(a[7:]) # Python print(a[::-1]) # 거꾸로 print(len(a)) # a[0] = 'i' # 주석 해제하면? 문자열은 불변(immutable)
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰

1. 인덱스는 0부터, 음수는 뒤에서부터입니다.
2. 슬라이싱 a[시작:끝]에서 끝은 포함되지 않습니다.
3. 문자열은 immutable — 인덱스로 글자를 바꿀 수 없습니다.

AI가 “문자열도 인덱스로 수정 가능하다”고 얼버무릴 수 있습니다. TypeError를 직접 확인하세요.

### 1-4. 문자열 꾸미기 — 먼저 % 포맷팅 기초

지금은 고전적인 `%` 방식만 익힙니다. f-string은 3장에서 다시 나옵니다.

🤖 AI에게 물어보자

    파이썬 문자열 포맷팅 중 % 연산자만 자세히 설명해줘. %d, %s, %f, %% 의미와 hour=9, minute=20 으로 '나는 9시 20분에 학교에 갑니다.' 출력 예시를 보여줘. f-string은 나중에 배울 예정이니 지금은 %만 설명해줘.

🐍 % 포맷팅 실습 ○ 로딩 중…
hour = 9 minute = 20 print('나는 %d시 %d분에 갑니다.' % (hour, minute)) print('상위 %d%%' % 10) print('원주율 ≈ %.2f' % 3.141592)
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰

1. %d 정수, %s 문자열, %f 실수, %% 는 % 글자 자체
2. 여러 값은 % (값1, 값2) 튜플로 전달
3. f-string은 3장 리마인드에서 다룹니다

### 1-5. 리스트 기초와 True / False

🤖 AI에게 물어보자

    파이썬 리스트가 무엇인지 설명해줘. 빈 문자열, 빈 리스트, 숫자 0이 조건문에서 False로 취급되는 이유도 예시와 함께 알려줘.

🐍 리스트 실습 ○ 로딩 중…
a = ['I', 'Love', 'Python'] print(a[0], a[-1]) b = [1, 2, 3, 4, 5] print(b[0:2], b[3:]) print(bool([]), bool(''), bool(0), bool(1)) a[0] = 'You' # 리스트는 가변(mutable) print(a)
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰

1. 리스트는 [ ] 로 순서 있는 값을 담습니다.
2. 빈 값·0·None 은 False, 그 외는 대체로 True
3. 리스트는 mutable — 인덱스로 값을 바꿀 수 있습니다 (문자열과 다름)

### ✅ 1장 확인 퀴즈

답을 고르고 저장하면, 같은 세션으로 다시 접속했을 때 복원됩니다. 관리자는 학생별 진도에서 확인합니다.

📝 1장 확인 퀴즈

Q1. 빈 리스트 `[]` 를 조건문에 넣으면?

True False

Q2. 만든 뒤 요소를 바꿀 수 있는(mutable) 것은?

문자열(str) 리스트(list)

Q3. `print` 와 `PRINT` 는 같은가?

같다 다르다 (대소문자 구분)

## 2장. 제어문과 입출력

조건을 나누고, 반복하고, 입력을 받습니다. 나중에 컴프리헨션으로 짧게 쓰는 법은 4장에서.

### 2-1. 비교 / 논리 연산자

🤖 AI에게 물어보자

    파이썬 비교 연산자(==, !=, >, <)와 논리 연산자(and, or, not), in / not in 을 예시로 설명해줘. == 와 is 의 차이도 알려줘.

🐍 연산자 실습 ○ 로딩 중…
name = ['철수', '영희', '미희'] print('철수' in name) print('민수' not in name) a = 3 b = 3 print(a == b) # 값이 같은가 print(a is b) # 같은 객체인가 (초보 때는 == 사용)
실행 결과가 여기에 표시됩니다

### 2-2. 조건문 if / elif / else

🤖 AI에게 물어보자

    파이썬 if, elif, else 문법을 설명해줘. 점수 jumsu가 90 이상이면 '잘했어요', 70 이상이면 '잘할 수 있어요', 아니면 '노력하세요'를 출력하는 코드를 짜줘.

💡 AI 코드를 그대로 붙이지 말고, 들여쓰기를 직접 타이핑해 보세요.

🐍 조건문 실습 (input 대신 변수 사용) ○ 로딩 중…
jumsu = 85 # 숫자를 바꿔 보세요 if jumsu >= 90: print('잘했어요') elif jumsu >= 70: print('잘할 수 있어요') else: print('노력하세요')
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰

1. 조건 끝에는 반드시 콜론 :
2. 들여쓰기로 블록을 구분합니다
3. elif는 위에서부터 순서대로 검사합니다

### 2-3. 반복문 for / while 기초

지금은 for/while을 직접 씁니다. 한 줄 컴프리헨션은 4장에서.

🤖 AI에게 물어보자

    파이썬 for와 while 차이, range() 의미, break와 continue 역할을 예시로 설명해줘.

🐍 반복문 실습 ○ 로딩 중…
print('--- for ---') for i in range(5): print(i, end=' ') print() print('--- while ---') n = 0 while n < 5: print(n, end=' ') n += 1 print() print('--- break/continue ---') for i in range(10): if i == 3: continue if i == 7: break print(i, end=' ')
실행 결과가 여기에 표시됩니다

### 2-4. 입출력 다듬기

🤖 AI에게 물어보자

    print()의 end, sep 옵션과, input() 결과가 항상 문자열인 이유를 예시로 설명해줘.

🐍 print 옵션 실습 ○ 로딩 중…
print('A', 'B', 'C', sep='-') print('Hello', end=' ') print('World') age = '17' # input() 결과도 문자열 print(type(age)) print(int(age) + 1) # 숫자 계산 전 변환
실행 결과가 여기에 표시됩니다

### ✅ 2장 확인 퀴즈

답을 고르고 저장하면, 같은 세션으로 다시 접속했을 때 복원됩니다. 관리자는 학생별 진도에서 확인합니다.

📝 2장 확인 퀴즈

Q1. 조건문 끝에는 무엇이 필요한가?

콜론 : 세미콜론 ;

Q2. `break` 의 역할은?

이번만 건너뛰기 반복 종료

Q3. `input()` 결과의 기본 타입은?

int str (문자열)

## 3장. 자료구조 심화 · 함수 · 파일

### 3-1. 튜플

🤖 AI에게 물어보자

    파이썬 튜플이 리스트와 어떻게 다른지, 왜 값을 못 바꾸는지, 언제 쓰면 좋은지 설명해줘.

🐍 튜플 실습 ○ 로딩 중…
t = (1, 2, 3) print(t[0]) # t[0] = 10 # TypeError — 튜플은 불변 x, y = (10, 20) # 언패킹 print(x, y)
실행 결과가 여기에 표시됩니다

### 3-2. 딕셔너리

🤖 AI에게 물어보자

    파이썬 딕셔너리의 key/value, keys/values/items, get 사용법을 예시로 설명해줘.

🐍 딕셔너리 실습 ○ 로딩 중…
person = {'name': '철수', 'age': 17} print(person['name']) print(person.get('height', '없음')) for k, v in person.items(): print(k, v)
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰

1. 딕셔너리는 key로 값을 찾습니다 (순서가 아님).
2. 없는 키: person['x'] → KeyError / person.get('x') → None

### 3-3. 집합(set)

🐍 집합 실습 ○ 로딩 중…
a = {1, 2, 3, 3, 2} print(a) # 중복 제거 b = {2, 3, 4} print(a | b) # 합 print(a & b) # 교 print(a - b) # 차
실행 결과가 여기에 표시됩니다

### 3-4. 함수 만들기 기초

🤖 AI에게 물어보자

    파이썬 def로 함수 만드는 법, return, 기본값 매개변수를 설명해줘. start~end 사이 합을 구하는 sum_range 함수 예시도 보여줘.

🐍 함수 실습 ○ 로딩 중…
def sum_range(start, end): total = 0 for i in range(start, end + 1): total += i return total print(sum_range(1, 10)) def greet(name, msg='안녕'): print(msg + ', ' + name) greet('파이썬') greet('파이썬', '반가워')
실행 결과가 여기에 표시됩니다

### 3-5. [리마인드] f-string · format 고급

1장 % 포맷을 기억하나요? 이제 실무에서 가장 많이 쓰는 f-string을 배웁니다.

🐍 세 가지 포맷 비교 ○ 로딩 중…
hour, minute = 9, 20 print('나는 %d시 %d분' % (hour, minute)) # 1장 print('나는 {}시 {}분'.format(hour, minute)) # format print(f'나는 {hour}시 {minute}분') # f-string (추천) print(f'원주율 ≈ {3.141592:.2f}')
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰

1. f-string: 문자열 앞 f, 중괄호 안에 변수/표현식
2. 이제부터는 f-string을 기본으로 쓰세요
3. % 와 format은 예전 코드를 읽을 수 있을 정도만

### 3-6. 파일 읽고 쓰기

🤖 AI에게 물어보자

    파이썬에서 파일 열기(open), r/w/a 모드, with open 구문, encoding='utf-8' 이 필요한 이유를 설명해줘.

브라우저 실행기에서는 실제 파일 시스템이 제한됩니다. 문법은 AI에게 물어보고, 로컬(파이참·VS Code)에서 파일을 만들어 연습하세요. 4장의 pathlib도 참고.

    with open('memo.txt', 'w', encoding='utf-8') as f:
        f.write('안녕하세요\n')

    with open('memo.txt', 'r', encoding='utf-8') as f:
        print(f.read())

### ✅ 3장 확인 퀴즈

답을 고르고 저장하면, 같은 세션으로 다시 접속했을 때 복원됩니다. 관리자는 학생별 진도에서 확인합니다.

📝 3장 확인 퀴즈

Q1. 튜플의 특징은?

가변(mutable) 불변(immutable)

Q2. 없는 키에 `dict["x"]` 하면?

None KeyError

Q3. 실무에서 권장하는 문자열 포맷은?

% 포맷 f-string

## 4장. 객체지향 · 모듈 · 예외 · 고급 표현

앞 장에서 배운 기능을 더 짧게·더 안전하게 쓰는 표현을 모았습니다.

### 4-1. 클래스 기초 — 붕어빵 틀

클래스 = 설계도(틀), 인스턴스 = 그 틀로 만든 실제 객체.

🤖 AI에게 물어보자

    파이썬 클래스와 인스턴스 차이, __init__, self가 왜 필요한지 비유와 함께 설명해줘. 간단한 Person 클래스 예시도 보여줘.

🐍 클래스 실습 ○ 로딩 중…
class Person: def __init__(self, name, age): self.name = name self.age = age def introduce(self): print(f'나는 {self.name}, {self.age}살') p1 = Person('철수', 17) p2 = Person('영희', 16) p1.introduce() p2.introduce()
실행 결과가 여기에 표시됩니다
👩‍🏫 선생님 리뷰

1. __init__ 은 객체가 만들어질 때 자동 호출됩니다.
2. self 는 그 객체 자신입니다.
3. 같은 클래스로 만든 객체는 데이터가 서로 독립적입니다.

### 4-2. 상속과 오버라이딩

🐍 상속 실습 ○ 로딩 중…
class Animal: def speak(self): print('...') class Dog(Animal): def speak(self): print('멍멍') class Cat(Animal): def speak(self): print('야옹') Dog().speak() Cat().speak()
실행 결과가 여기에 표시됩니다

### 4-3. 모듈과 패키지

🤖 AI에게 물어보자

    파이썬 모듈·패키지, import / from import, if __name__ == '__main__' 이 왜 필요한지 설명해줘.

🐍 표준 모듈 맛보기 ○ 로딩 중…
import math from random import randint print(math.sqrt(16)) print(randint(1, 6))
실행 결과가 여기에 표시됩니다

### 4-4. 예외 처리

🐍 try / except 실습 ○ 로딩 중…
for n in [2, 0, 'a']: try: print(10 / n) except ZeroDivisionError: print('0으로 나눌 수 없음') except TypeError: print('숫자만 가능') finally: print('---')
실행 결과가 여기에 표시됩니다

### 4-5. [고급] 리스트 · 딕셔너리 컴프리헨션 고급

2장 for문으로 만들던 리스트를 한 줄로.

🐍 for vs 컴프리헨션 ○ 로딩 중…
# for문 evens = [] for i in range(1, 11): if i % 2 == 0: evens.append(i) print('for :', evens) # 컴프리헨션 evens2 = [i for i in range(1, 11) if i % 2 == 0] print('comp:', evens2) squares = {x: x * x for x in range(1, 6)} print('dict:', squares)
실행 결과가 여기에 표시됩니다

### 4-6. [고급] 람다 · map · filter 고급

🐍 람다 실습 ○ 로딩 중…
add = lambda x, y: x + y print(add(3, 5)) nums = [1, 2, 3, 4, 5] print(list(map(lambda x: x * 2, nums))) print(list(filter(lambda x: x % 2 == 0, nums))) # 같은 일 — 컴프리헨션이 더 읽기 쉬운 경우가 많음 print([x * 2 for x in nums]) print([x for x in nums if x % 2 == 0])
실행 결과가 여기에 표시됩니다

### 4-7. [고급] 데코레이터 기초 고급

🤖 AI에게 물어보자

    파이썬 데코레이터가 무엇인지 초보자용으로 설명해줘. 함수 실행 전후에 '시작'/'끝'을 출력하는 데코레이터 예제와 @ 문법도 알려줘.

🐍 데코레이터 실습 ○ 로딩 중…
def log_decorator(func): def wrapper(*args, **kwargs): print('시작') result = func(*args, **kwargs) print('끝') return result return wrapper @log_decorator def hello(name): print('안녕, ' + name) hello('파이썬')
실행 결과가 여기에 표시됩니다

### 4-8. [고급] 비동기 기초 (개념) 고급

🤖 AI에게 물어보자

    파이썬 async/await와 asyncio가 무엇인지, 동기와 비동기 차이를 비유로 설명해줘. asyncio.sleep 간단 예제도 보여줘.

💡 지금은 ‘기다리는 동안 다른 일을 하는 방법’ 정도만 이해하면 됩니다.

브라우저 Pyodide 환경에서는 asyncio 제약이 있을 수 있습니다. 개념은 AI에게 물어보고, 로컬에서 실험해 보세요.

### 4-9. [고급] pathlib · 타입 힌트 고급

🤖 AI에게 물어보자

    pathlib.Path 사용법과 os.path 대비 장점, 함수 타입 힌트(type hint) 간단한 예제를 알려줘.

🐍 타입 힌트 맛보기 ○ 로딩 중…
def add(a: int, b: int) -> int: return a + b def greet(name: str) -> None: print(f'안녕, {name}') print(add(2, 3)) greet('파이썬') # 타입 힌트는 실행을 바꾸지 않지만, 가독성·도구 지원에 도움이 됩니다.
실행 결과가 여기에 표시됩니다

### ✅ 4장 확인 퀴즈

답을 고르고 저장하면, 같은 세션으로 다시 접속했을 때 복원됩니다. 관리자는 학생별 진도에서 확인합니다.

📝 4장 확인 퀴즈

Q1. 클래스에서 객체 자신을 가리키는 이름은?

this self

Q2. 리스트 컴프리헨션은 무엇을 짧게 쓰나?

for 반복으로 리스트 만들기 클래스 정의

Q3. 데코레이터 기호는?

@ #

## 5장. AI와 함께하는 자기주도 프로젝트

### 5-1. AI와 협업하는 3가지 원칙

1

### 질문을 잘 한다

목표·제약·예시를 명확히. “코드 짜줘”보다 입출력·예외까지 구체적으로.

2

### 그대로 믿지 않는다

반드시 실행해 검증하고, 틀린 부분을 스스로 고칩니다.

3

### 내 말로 설명한다

동작 이유를 설명할 수 있어야 진짜 이해입니다.

### 5-2. 프로젝트 — 데이터 분석 (CSV)

🤖 AI에게 물어보자

    파이썬 csv 모듈로 CSV를 읽고, 헤더를 건너뛰고, 숫자 합계를 구한 뒤 result.csv로 저장하는 예제 코드를 보여줘.

#### 미션 예시

- 주/야간 사고건수 총합
- 부상자·사망자가 가장 많은 달
- 연간 평균 (도전: 유형별 합계를 파일로 저장)

### 5-3. 프로젝트 — 남이 짠 코드 리뷰

🤖 AI에게 물어보자

    아래 주소록 프로그램 코드를 한 줄씩 역할을 설명해줘. 개선점(예외처리, 함수 분리, with 구문, 저장 형식 등)을 3가지 이상 제안해줘. (코드는 선생님이 준 예제를 붙여 넣으세요)

👩‍🏫 선생님이 자주 짚는 개선 포인트

1. open 후 close 전에 오류 나면 파일이 안 닫힘 → with open 권장
2. FileNotFoundError 대비 부족
3. 줄 단위 암묵적 규칙보다 JSON 등 구조적 저장이 안전

### 5-4. 나만의 미니 프로젝트

#### 주제 예시

- 캐릭터/몬스터 텍스트 게임 (클래스 + 파일 로드)
- 주소록·할일 관리 (5-3 개선)
- 설문 CSV 분석
- 실행 시간 재는 데코레이터 활용 타이머

#### 기획 단계 AI 질문 예시

“텍스트 기반 몬스터 배틀을 파이썬 클래스로 설계하려고 해. 필요한 클래스와 속성/메서드 구조만 먼저 제안해줘. 코드는 아직 짜지 마.”

마무리 미션: 오늘 배운 것 중 AI가 틀리거나 헷갈리게 알려준 부분 1가지를 내 말로 다시 설명해 선생님에게 보여 주세요.