2단원을 한 문장으로
프로그램은 값을 담고 옮기고 계산하는 일의 반복이며, 제어 구조와 함수는 그 반복을 사람이 다룰 수 있는 크기로 나누는 도구다.
18차시의 메모장 프로그램이 이 한 문장을 그대로 보여 준다. 변수에 값을 담고, 입력으로 받고, 개수를 세고, 조건과 반복으로 흐름을 정하고, 함수로 나누고, 파일에 남겼다. 2단원의 도구만으로도 쓸 만한 프로그램이 된다.
정리 ① 변수와 자료형
되돌아갈 곳: 1차시 변수 — 값에 이름을 붙이다 · 2차시 자료형 — 값의 종류 · 3차시 문자열 다루기 · 4차시 여러 값을 한 번에 — 리스트와 배열
정리 ② 입력과 출력
되돌아갈 곳: 5차시 출력의 형식을 정하다 · 6차시 입력을 받아 처리하다
정리 ③ 연산자
되돌아갈 곳: 7차시 계산하는 연산자 · 8차시 비교하고 판단하는 연산자
정리 ④ 제어 구조
되돌아갈 곳: 9차시 순차와 선택 — 갈라지는 흐름 · 10차시 반복 — 같은 일을 여러 번 · 11차시 중첩된 제어 구조 · 12차시 알맞은 제어 구조 골라 쓰기
정리 ⑤ 함수
되돌아갈 곳: 13차시 함수는 왜 필요한가 · 14차시 함수 정의하고 호출하기 · 15차시 결괏값을 돌려받다 · 16차시 함수로 프로그램 나누기
정리 ⑥ 파일
되돌아갈 곳: 17차시 파일이란 무엇인가 · 18차시 파일에 읽고 쓰는 프로그램
개념이 이어지는 자리
2단원의 문법은 서로 걸려 있고, 1단원에서 정한 것들과도 걸려 있다.
스스로 점검하기
성취기준별로 지금 할 수 있는 것을 표시해 보자. 문법은 「알아본다」와 「내가 쓴다」가 다르다. 확인하는 방법은 예제를 보지 않고 빈 화면에서 짧은 프로그램 하나를 만들어 보는 것이다.
| 확인할 것 |
아직 |
대체로 |
할 수 있다 |
되돌아갈 차시 |
| 변수에 값을 담고 이름을 알맞게 지을 수 있다 |
☐ |
☐ |
☐ |
1차시 |
| 네 가지 기본 자료형을 구분해 쓸 수 있다 |
☐ |
☐ |
☐ |
2차시 |
"7" 과 7 의 차이를 예를 들어 설명할 수 있다 |
☐ |
☐ |
☐ |
2·3차시 |
| 문자열과 리스트에서 원하는 자리의 값을 꺼낼 수 있다 |
☐ |
☐ |
☐ |
3·4차시 |
| 표처럼 자리를 맞춰 출력할 수 있다 |
☐ |
☐ |
☐ |
5차시 |
| 입력받은 값을 숫자로 바꿔 계산할 수 있다 |
☐ |
☐ |
☐ |
6차시 |
| 몫과 나머지를 문제에 맞게 골라 쓸 수 있다 |
☐ |
☐ |
☐ |
7차시 |
| 두 언어의 나누기 차이를 설명할 수 있다 |
☐ |
☐ |
☐ |
7차시 |
| 여러 조건을 논리 연산자로 묶을 수 있다 |
☐ |
☐ |
☐ |
8차시 |
| 조건에 따라 갈라지는 프로그램을 만들 수 있다 |
☐ |
☐ |
☐ |
9차시 |
for 와 while 을 근거를 들어 골라 쓸 수 있다 |
☐ |
☐ |
☐ |
10·12차시 |
| 중첩 반복의 실행 횟수를 셀 수 있다 |
☐ |
☐ |
☐ |
11차시 |
| 되풀이되는 코드를 함수로 묶을 수 있다 |
☐ |
☐ |
☐ |
13·14차시 |
| 매개변수와 반환값이 있는 함수를 만들 수 있다 |
☐ |
☐ |
☐ |
14·15차시 |
| 프로그램을 함수 여러 개로 나눠 만들 수 있다 |
☐ |
☐ |
☐ |
16차시 |
| 파일을 열고 읽고 닫을 수 있다 |
☐ |
☐ |
☐ |
17차시 |
| 파일에 값을 남기고 다시 불러올 수 있다 |
☐ |
☐ |
☐ |
18차시 |
「아직」에 표시한 줄이 있으면 그 차시로 돌아가 활동만 다시 해 본다. 본문을 다시 읽는 것보다 빠르다. 문법은 읽어서가 아니라 쳐 보아서 남는다.
단원 평가 문제
2단원 평가 문제
보기를 누르면 바로 채점된다. 틀려도 해설을 읽으면 된다.
Python에서 값 = 「10」 이라 적고 값 + 5 를 실행하면?프그02-01
문자열과 정수는 더할 수 없어 TypeError 가 난다. 이어 붙이려면 「10」 + 「5」, 더하려면 int(값) + 5 로 자료형을 맞춰야 한다.
0.1 + 0.2 == 0.3 이 거짓인 까닭은?프그02-01
0.1 과 0.2 는 2진수로 정확히 표현되지 않아 아주 작은 오차가 남는다. 그래서 실수는 같은지 비교하지 않고, 차이가 아주 작은지로 판단한다.
한글 「가나다」 에 대해 Python의 len() 과 C의 strlen() 이 각각 돌려주는 값은?프그02-01
Python 의 len() 은 글자 수를 세어 3 이고, C 의 strlen() 은 바이트 수를 세어 UTF-8 한글 3바이트 × 3자 = 9 다. 자리 맞추기가 두 언어에서 어긋나는 원인이 이것이다.
input() 으로 받은 값을 그대로 + 로 더했더니 「1020」 이 나왔다. 원인은?프그02-02
input() 은 무엇을 넣어도 문자열을 돌려준다. 계산하려면 int() 나 float() 로 바꿔야 한다. 이 실수는 결과가 그럴싸하게 나와서 알아채기 어렵다.
한글이 섞인 표를 출력할 때 자리 맞추기가 어긋나지 않게 하는 가장 안전한 방법은?프그02-02
Python 은 글자 수로, C 는 바이트 수로 폭을 세므로 한글 칸에 폭을 주면 두 언어의 결과가 갈린다. 숫자 칸에만 폭을 주면 어느 쪽에서도 어긋나지 않는다.
Python과 C에서 7 / 2 의 결과는 각각 무엇인가?프그02-03
Python 의 / 는 늘 실수를 주므로 3.5 이고, 몫은 // 로 얻는다. C 는 정수끼리 나누면 몫을 주므로 3 이다. 두 언어를 옮겨 적을 때 가장 자주 어긋나는 자리다.
어떤 수가 3의 배수인지 확인하려면 무엇을 쓰는가?프그02-03
나머지가 0 이면 나누어떨어진다. 나머지 연산자는 배수 판별뿐 아니라 자릿수 뽑기와 순환하는 값을 만드는 데도 쓴다.
개수 != 0 and 합계 / 개수 > 60 에서 개수 가 0일 때 나누기 오류가 나지 않는 까닭은?프그02-03
단축 평가다. and 는 앞이 거짓이면 뒤를 계산하지 않는다. 이 성질을 알면 「먼저 확인할 것」을 앞에 두어 오류를 막을 수 있다. 순서를 바꾸면 오류가 난다.
점수 90점을 「90 이상 A · 80 이상 B」 순으로 검사하는 대신 「80 이상 B · 90 이상 A」 순으로 적으면?프그02-04
여러 갈래는 위에서부터 처음 맞는 하나만 실행된다. 90 은 80 이상 조건에도 맞으므로 B에서 걸려 끝난다. 범위가 겹치는 조건은 좁은 것을 위에 둔다.
반복 횟수가 실행 전에 정해지지 않은 경우에 알맞은 것은?프그02-04
「사용자가 그만이라 할 때까지」처럼 몇 번 돌지 모를 때는 while 이 맞다. 다만 조건을 거짓으로 만드는 처리가 반복 안에 있어야 끝난다.
바깥 반복이 3번, 안쪽 반복이 4번인 중첩 반복에서 안쪽 문장이 실행되는 횟수는?프그02-04
안쪽은 바깥 한 번마다 전부 돌아가므로 3 × 4 = 12 번이다. 실행 횟수가 곱으로 늘어난다는 것이 중첩 반복에서 성능을 따질 때의 출발점이다.
함수를 쓰는 가장 중요한 이유로 알맞은 것은?프그02-05
함수를 만들면 정의가 늘어나 줄 수는 오히려 늘 수도 있다. 얻는 것은 유지·보수와 검증의 편의다. 1단원 5차시의 「한 모듈에 한 가지 일」과 같은 이야기다.
함수 안에서 만든 변수를 함수 밖에서 쓰려고 하면?프그02-05
지역 변수는 그 함수 안에서만 통한다. 불편해 보이지만 이 성질 덕분에 함수마다 같은 이름을 자유롭게 써도 서로 부딪히지 않는다. 밖으로 값을 보내려면 반환값을 쓴다.
프로그램을 껐다 켜도 값이 남게 하려면 어디에 저장해야 하는가?프그02-06
변수는 메모리에 있어 프로그램이 끝나면 사라진다. 파일은 저장 장치에 남으므로 다시 실행해도 읽어 올 수 있다. 이 성질을 데이터 지속성이라 한다.
값을 쌓아 가는 파일을 실수로 「w」 모드로 열면 어떤 일이 생기는가?프그02-06
쓰기 모드는 기존 내용을 지운다. 되돌릴 수 없다. 쌓아 가려면 이어 쓰기 모드(「a」)를 써야 한다. 모드 한 글자가 자료를 지울지 살릴지 정한다.
3단원으로 넘어가기 전에
2단원까지 오면 문법은 갖춰졌다. 값을 담고 계산하고 흐름을 정하고 나누고 남길 수 있다. 그런데 문법을 다 알아도 막히는 자리가 있다.
무엇을 만들지 정해져 있지 않을 때 무엇부터 하는가?
3단원이 이 물음을 다룬다. 요구 사항을 정하고, 구조를 설계하고, 부품을 만들어 이어 붙이고, 시험하고, 고쳐 낸다. 1단원에서 절차를 배웠고, 2단원에서 도구를 익혔고, 3단원에서 그 둘로 실제 프로그램 하나를 끝까지 만든다.