단원 홈
3단원 · 5차시

프로그램의 입과 귀
표준입출력과 파일입출력

대화하지 못하는 프로그램은 계산기일 뿐입니다. 사용자와 대화하고(표준입출력), 꺼져도 기억하는(파일입출력) 프로그램을 만들어 봅시다.

성취기준 12정03-05
input()print()f-string open()파일 읽기·쓰기
🎯 학습 목표
  • 표준입출력(input·print)을 활용하여 사용자와 상호 작용하는 프로그램을 작성할 수 있다.
  • 파일입출력(open·read·write)을 활용하여 데이터를 저장하고 불러오는 프로그램을 작성할 수 있다.
  • 표준입출력과 파일입출력의 차이를 이해하고 상황에 맞게 활용할 수 있다.
🤔

생각 열기 — 입력 → 처리 → 출력, 어디서 봤더라?

1단원 피지컬 컴퓨팅을 기억하나요? 센서(입력) → 마이크로컨트롤러(처리) → 액추에이터(출력). 사실 세상 모든 프로그램이 이 구조예요. 검색창에 단어를 넣으면(입력) 검색 엔진이 찾아서(처리) 결과를 보여 주죠(출력). 지금까지 우리가 만든 프로그램은 데이터를 코드 안에 직접 적었지만(age = 17), 오늘부터는 사용자가 실행할 때마다 다른 데이터를 넣을 수 있는 살아 있는 프로그램을 만듭니다.

💬 함께 생각해 보기

게임의 '저장하기'가 없다면 어떨까요? 껐다 켤 때마다 처음부터…😱 프로그램의 변수는 실행이 끝나면 모두 사라집니다. 그렇다면 게임 회사는 내 레벨과 아이템을 어디에, 어떻게 남겨 둘까요? — 오늘 배울 두 번째 주제, 파일입출력이 그 답입니다.

1

표준입출력 — 키보드로 듣고 화면으로 말하기

input과 print, 그리고 형변환의 함정

표준입출력은 프로그램의 기본 대화 통로예요 — 키보드에서 듣고(input), 화면으로 말합니다(print). 직접 실행해 보세요. 실행을 누르면 입력창이 떠요!

⚠️ input()의 함정 — 4차시에서 만난 그 문제!

input()이 돌려주는 값은 항상 문자열(str)이에요. 숫자를 입력해도 "17"처럼 따옴표를 두른 채 도착하죠. 계산하려면 반드시 형변환int(input()) 또는 float(input())! 아래에서 직접 확인하세요.

🛠️ 활동 1 — 나만의 대화 프로그램

위 실행기의 코드를 고쳐 다음 중 하나를 만들어 보세요. (둘 다 만들면 금상첨화!)

  1. 용돈 계산기: 한 달 용돈과 하루 평균 지출을 입력받아, 며칠 만에 용돈이 바닥나는지 출력 (몫 연산 // 활용)
  2. 모둠 평균 계산기: 모둠원 4명의 수행평가 점수를 입력받아 평균과 최고점 출력 (리스트 + sum(), max() 활용 — 4차시 복습!)
2

파일입출력 — 꺼져도 기억하는 프로그램

변수는 사라지지만 파일은 남는다

변수는 프로그램이 끝나면 사라져요(휘발성). 데이터를 영구히 남기려면 파일입출력이 필요합니다. 파이썬에서는 open()으로 파일을 열고, 쓰고(write), 읽습니다(read). 핵심 약속 세 가지:

📂

① 열기 — open(이름, 모드)

"w" 새로 쓰기(기존 내용 삭제!) / "a" 뒤에 추가 / "r" 읽기

✍️

② 쓰기·읽기

f.write(문자열)로 쓰고, f.read() 또는 줄 단위 반복으로 읽어요.

🚪

③ 닫기 — with 문

with open(...) as f: 블록을 쓰면 끝날 때 자동으로 닫혀요. 안전!

💡 "w"와 "a"의 결정적 차이 — 직접 사고를 내 보세요!

위 코드에서 ②의 "a""w"로 바꿔 실행해 보세요. 일기의 앞부분이 통째로 사라집니다! "w"는 기존 내용을 지우고 새로 쓰는 모드이기 때문이죠. 실무에서도 정말 많이 나는 사고예요 — 교과서 안에서 미리 안전하게 겪어 두세요. 😉 (이 실행기의 파일은 브라우저 안 가상 공간에 만들어져서 컴퓨터에는 흔적이 남지 않아요!)

3

표준입출력 × 파일입출력 — 데이터가 흐르는 프로그램

2단원에서 만난 CSV, 코드로 다루기

2단원에서 공공데이터포털의 CSV 파일(쉼표로 구분된 표 데이터)을 내려받아 봤죠? 이제 그 파일을 코드로 직접 읽고 분석할 수 있습니다. 표준입출력과 파일입출력이 만나면 "사용자에게 묻고 → 파일에서 찾아 → 답해 주는" 진짜 프로그램이 돼요.

🛠️ 활동 2 — 미션: 출석부 프로그램 완성하기

위 실행기를 활용해 단계별 미션에 도전하세요.

  1. 미션 ①: 자신의 이름과 점수를 한 줄 추가하고 평균이 어떻게 변하는지 확인하세요.
  2. 미션 ②: 최저점을 받은 사람을 찾아 출력하는 코드를 추가하세요. (힌트: min())
  3. 미션 ③ (도전): ①번 쓰기 부분을 input()으로 바꿔, 사용자가 입력한 이름·점수를 파일에 추가하는 프로그램으로 업그레이드하세요 — 표준입출력과 파일입출력이 한 프로그램에서 협력하면 성취기준 완성!
구분표준입출력파일입출력
상대사용자 (키보드·화면)저장 장치의 파일
데이터 수명프로그램이 끝나면 사라짐영구 보존
어울리는 일실시간 대화, 즉석 계산기록 누적, 대량 데이터 처리, 프로그램 간 데이터 전달
대표 함수input(), print()open(), read(), write()

확인 문제

바로바로 채점! 해설까지 꼭 읽어 보세요.

📝

5차시 확인 문제

4문항 · 즉시 채점

1a = input()에 3을, b = input()에 4를 입력한 뒤 print(a + b)의 결과는?

2기존 일기 파일의 내용을 지우지 않고 뒤에 새 일기를 추가하려면 open()의 모드는?

3파일입출력이 꼭 필요한 상황은?

4with open(...) as f: 구문의 가장 큰 장점은?

🚀

더 알아보기

교육과정 너머, 궁금한 만큼 깊이!

심화'표준'입출력이라는 이름의 비밀 — 스트림과 리다이렉션

왜 하필 '표준(standard)'일까요? 운영체제는 모든 프로그램에 세 개의 기본 통로(스트림)를 꽂아 줍니다 — 표준 입력(stdin), 표준 출력(stdout), 표준 오류(stderr). 기본값이 키보드와 화면일 뿐, 이 통로는 방향을 바꿀 수 있어요(리다이렉션).

예를 들어 터미널에서 python score.py > result.txt라고 실행하면, print()의 출력이 화면 대신 파일로 흘러갑니다! 프로그램은 한 줄도 안 고쳤는데 말이죠. 심지어 프로그램A | 프로그램B처럼 A의 출력을 B의 입력으로 직결할 수도 있어요(파이프). 작은 프로그램들을 수도관처럼 이어 큰일을 해내는 것 — 1차시에서 배운 분해의 운영체제 버전이랍니다.

버튼을 눌러 stdout의 방향을 직접 바꿔 보세요 — 프로그램 코드는 그대로인데 출력의 행선지만 달라집니다!

⌨️ 키보드 stdin score.py print(...) → stdout 🖥️ 화면 📄 result.txt ⚙️ 프로그램 B
$ python score.py
심화한글이 깨지는 이유 — encoding="utf-8"의 정체

예제마다 encoding="utf-8"을 붙인 것, 눈치챘나요? 2단원에서 배웠듯 컴퓨터는 글자를 숫자로 저장하는데, 글자↔숫자 대응 규칙(인코딩)이 여러 가지예요. 쓸 때와 읽을 때 규칙이 다르면 — "뷁뷁�?�" 같은 글자 깨짐이 일어납니다.

UTF-8은 전 세계 문자를 모두 담는 표준 인코딩으로, 웹 문서의 98% 이상이 사용해요. 한글 파일을 다룰 때 encoding="utf-8"을 습관처럼 붙이면 깨짐 사고의 대부분을 예방할 수 있습니다. (한국어 윈도우의 엑셀이 CSV를 옛 인코딩(cp949)으로 저장하는 경우가 많아, 공공데이터 CSV를 utf-8로 열다 오류를 만나면 encoding="cp949"로 바꿔 열어 보세요!)

UTF-8의 재주는 글자마다 바이트 수를 다르게 쓰는 것 — 버튼을 눌러 직접 확인해 보세요.

'한'의 유니코드 번호 U+D55C를 16비트로: 1101 010101 011100
3바이트 틀에 끼우면: 11101101  10010101  10011100  =  ED 95 9C(회색 비트가 UTF-8의 '틀')
심화구조를 통째로 저장하고 싶다면 — JSON 맛보기

딕셔너리나 리스트를 통째로 파일에 남기고 싶을 때는 JSON 형식이 표준이에요. 웹 API, 게임 세이브 파일, 앱 설정 — 어디에나 JSON이 있습니다.

게임의 '이어하기'가 어떻게 동작하는지, 이제 원리를 아는 사람이 되었네요!

연계2단원 데이터 수집 × 5차시 — 진짜 공공데이터를 읽어 보자

2단원에서 공공데이터포털의 CSV를 내려받았다면, 이제 그것을 분석할 무기가 생겼어요. 학교 컴퓨터실 파이썬(IDLE)에서 도전해 보세요:

  1. 공공데이터포털(data.go.kr)이나 기상자료개방포털에서 관심 있는 CSV를 내려받는다.
  2. 오늘 배운 패턴(open → 줄 반복 → split(",") → 형변환 → 리스트)으로 읽는다.
  3. sum/len/max/min으로 기초 통계를 내고, 2단원에서 배운 '해석 4단계'로 의미를 읽는다.

형식이 궁금하다면 여기서 미리 체험! 진짜 공공데이터 CSV처럼 첫 줄에 헤더(제목 줄)가 있는 파일을 읽어 봅니다.

수집(2단원) → 코드로 분석(3단원) → 시각화·해석(2단원) — 단원들이 하나의 데이터 파이프라인으로 연결됩니다!

📌

한눈에 정리

  • 표준입출력: input()으로 듣고 print()로 말한다 — f-string으로 보기 좋게!
  • input()항상 문자열을 준다 — 계산 전에 int()/float() 형변환 필수
  • 파일입출력: open(이름, 모드)"w" 새로 쓰기(주의: 기존 내용 삭제!), "a" 추가, "r" 읽기
  • with 문으로 열면 자동으로 닫혀 안전하다
  • 변수는 휘발, 파일은 영구 — 기록이 필요한 프로그램의 필수 기술 (CSV 분석까지!)