
단원해설
01. Python이란 무엇일까?
파이선은 네덜란드의 귀도 반 로섬(Guido van Rossum)이 만든 프로그래밍 언어이다. 귀도 반 로섬은 암스테르담대학교에서 컴퓨터과학과 수학을 전공했으며, CWI 연구소에서 ‘A B C’라는 프로그래밍 언어를 만드는 프로젝트에도 참여했다. 같은 회사의 ‘아모에바’라는 팀으로 옮겨 마이크로 커널 기반 분산시스템 환경에 대해 연구하기도 했는데, A B C 언어 개발과 분산시스템 연구는 파이선을 만드는 데 중요한 계기가 되었다.
“새로운 분산 환경 시스템에 맞으면서 C와 셀에서 부족한 부분을 채워주는 새로운 언어를 개발하고 싶었다.”라고 이야기하던 그는 그렇게 해서 취미활동으로 새로운 언어를 개발하기 시작했다.
‘파이선(Python)’이란 원래 그리스 신화에 나오는 뱀 이름이다. 파이선 로고에 두 개의 뱀이 서로 마주본 듯한 그림이 있는 이유도 이 때문이다. 하지만 귀도 반 로섬이 실제 ‘파이선’이란 이름을 지을 당시에는 그리스 신화를 참고한 것은 아니었다. 그가 좋아하던 영국 BBC 방송의 프로그램인 ‘Monty Python’s Flying Circus’에서 가져온 단어이다.
파이선은 다음과 같은 장점이 있다.
첫째, 문법이 간결하고 표현 구조가 인간의 사고 체계와 닮아 있어 초보자가 배우기 쉽다는 점
둘째, 외부에 풍부한 라이브러리가 있어 다양한 용도로 확장하기 좋다는 점
셋째, 생산성이 높은 점
한편, 단점으로는 다른 프로그래밍 언어에 비해 상대적으로 속도가 느리다는 점, 모바일 앱 개발 환경에서 사용하기 힘들다는 점, 또한 컴파일 시 타입 검사가 이뤄지지 않아 개발자가 실수할 여지가 조금 더 많다거나 멀티 코어를 활용하기 쉽지 않다는 지적이 있다.
02. 어떤 활동을 배우게 되나?
첫째, ‘텍스트형 데이터 다루기’에서는 데이터를 담는 변수의 개념에 대해 알아보고 파이선에서의 텍스트 데이터에 대해 공부하게 된다. 텍스트 데이터를 어떻게 생성하고, 결합하고 분리해낼 수 있는지 알아보고, 텍스트 데이터의 탐색과 길이에 대해서도 알아볼 수 있다.
둘째, ‘숫자형 데이터 다루기’에서는 수와 관련된 변수와 산술 연산자에 대해 공부하게 된다. 텍스트 데이터와는 다른 수와 관련된 데이터의 개념에 대해 알아보고, 사칙연산은 물론 다양한 연산과 관련된 산술연산자의 개념과 예시 활동을 통해 숫자형 데이터를 다루는 법에 대해 알아볼 수 있다.
셋째, ‘확장형 데이터 다루기’에서는 리스트, 튜플, 딕셔너리와 같이 확장형 데이터의 개념에 대해 공부하게 된다. 변수만을 사용했을 경우의 문제점을 확장형 데이터를 통해 해결해보고, 확장형 데이터를 생성하고 변경하는 방법과 예시 활동을 통해 확장형 데이터를 다양하게 활용하는 법에 대해 알아볼 수 있다.
넷째, ‘조건문으로 흐름 제어하기’에서는 if 문과 비교연산자에 대해 공부하게 된다. 기존의 프로그램 흐름이 한 방향으로 이루어졌다면, 다양한 조건에 따라 프로그램의 흐름이 나누어지는 것을 확인하고 제어하는 법에 대해 알아볼 수 있다. 또한 이러한 조건문에 필요한 비교 연산자의 개념과 예시를 통해 프로그램의 흐름을 제어하는 방법을 익힐 수 있다.
다섯째, ‘반복문으로 흐름 제어하기’에서는 for 문과 while 문으로 반복문에 대해 공부하게 된다. 문제를 효율적으로 해결하는 과정에서 꼭 필요한 반복의 과정을 이해하고 프로그램의 흐름 속에서 제어해보는 활동을 하게 된다. 또한 break 문, continue 문 등의 기타 제어문을 통해 다양한 방식으로 프로그램의 흐름을 제어하는 방법을 익힐 수 있다.
여섯째, ‘함수 선언하기’에서는 함수와 모듈의 개념과 활용에 대해 공부하게 된다. 이미 앞의 활동에서 자연스럽게 사용했던 함수는 물론, 복잡한 프로그램에서 유용하게 사용되는 함수의 개념에 대해 알아보고 직접 함수를 정의하는 활동을 하게 된다. 함수의 집합으로 불리는 모듈의 사용법에 대해서도 알아보고 외부에서 작성된 함수를 불러들여 사용하는 방법을 익힐 수 있다.

1. 텍스트형 데이터 다루기
【파이선 배우기】
1. 변수
2. 텍스트 다루기
변수는 데이터를 저장하기 위한 공간으로 데이터를 저장하는 ‘그릇’이라고 생각하면 된다. 밥그릇, 국그릇, 반찬 그릇 등 그릇의 종류가 다양하듯이 변수의 종류도 글을 담는 변수, 수를 담는 변수 등 다양하다. 밥을 국그릇에 담거나, 국을 반찬 그릇에 담을 수 없는 것처럼 데이터도 형식에 맞는 변수를 사용해야 한다.
파이선으로 프로그램을 만드는 일을 요리에 비유한다고 하면, 변수를 선언하는 것은 그릇을 준비하는 것과 같다. 요리를 하기 전에 그릇을 준비해야 하는 것처럼 프로그래밍을 할 때도 변수를 먼저 선언해주는 것이 좋다.
파이선으로 코드를 입력하려면 입력할 수 있는 프로그램이 필요하다. 여기서는 파이선을 설치할 때 같이 설치되는 입력프로그램인 IDLE를 사용해서 파이선을 실행시키도록 하겠다.

위와 같이 다양한 형태의 그릇을 그려주고, 첫 번째 그릇에는 여러 가지 문자들(예를 들면 Love, Python, 안녕, 연필 등)을 담아준다. 두 번째 그릇에는 정수(-3, 0, 1, 100 등)를 담아준다. 세 번째 그릇에는 실수(-1.03, 0.9, 100.98, 3.14 등)을 담아준다. 네 번째 그릇에는 True, False를 담아준다.
1변수
가. 변수 선언
변수의 이름은 직접 지어줘야 하는데, 다음 규칙을 지켜서 지어야 한다.
1) 문자, 숫자, 언더바( _ )를 포함할 수 있다.
2) 숫자로 시작하면 안 된다.
3) 대소문자를 구별한다.
4) 파이선에서 사용하는 예약어(True, False, and, or, not 등)은 변수 이름으로 사용할 수 없다.
나. 변수에 텍스트 데이터를 담는 방법
1) 변수에 텍스트 데이터를 대입

a="안녕?"
print(a)

>1text1.py
안녕?
첫 번째 행에서 변수 a에 “안녕?”이라는 문자열을 대입한 후 세 번째 행의 print() 함수로 변수 a의 값을 출력하는 명령이다.
2) 텍스트 변수의 값을 변수에 대입

a="안녕?"
b=a
print(a, b)

>1text2.py
안녕? 안녕?
첫 번째 행에서 변수 a에 “안녕?”이라는 문자열을 대입한 후 두 번째 행에서 변수 a의 값인 “안녕?”을 변수 b에 대입하도록 하였다. 세 번째 행의 print() 함수로 변수 a와 b의 값을 출력하는 명령이다.
3) 여러 줄로 이루어진 문자열은 따옴표 3개로 텍스트를 감싸서 표현

a='''안녕
만나서
반가워'''
print(a)
b="""나도
만나서
반가워"""
print(b)

>1text3.py
안녕
만나서
반가워
나도
만나서
반가워
한 문장을 표현할 때에는 큰 따옴표(“ ”) 또는 작은 따옴표(‘ ’)를 사용하지만 여러 줄로 이루어진 문자열의 경우 “ ”와 ‘ ’로 묶어줄 수 없기 때문에 연속된 큰 따옴표(”””) 또는 연속된 작은 따옴표(’’’)를 사용해서 변수에 대입한다.
다. 코딩해 보기
1) 화면에 “I’m your father.” he said를 출력해 보자.
a='''"I'm your father." he said'''
print(a)
2) 생일을 맞아 친구들을 우리 집에 초대하려고 한다. 다음과 같은 초대장을 화면에 출력해 보자.
생일파티에 초대해!
날짜: 8월 2일
시간: 6시
장소: 우리집
a='''생일파티에 초대해!
날짜: 8월 2일
시간: 6시
장소: 우리집'''
print(a)
2텍스트 다루기
가. 결합
1) + 연산자를 이용한 결합
연산을 할 때 사용하는 ‘+’ 연산자는 문자열을 결합하는 기능을 한다. 다음은 ‘+’ 연산자를 이용한 문자열 결합의 예제 코드이다.

a="hello"
b="python"
c=a+b
print(c)

>1text4.py
hellopython
변수 a에 “hello”, 변수 b에 “python”이 대입되어 있을 때 변수 c를 a+b로 선언할 경우 변수 c에는 두 문자열이 결합되어 “hellopython”이 대입된다.
2) 변수의 값을 문자열에 포함하기
변수의 값을 문자열에 포함하려고 한다면, 나중에 추가할 값에 대한 표시인 %s(문자열)나 %d(정수), %f(실수)를 이용해 문자열에 값을 포함시킬 수 있다. 다음은 %s, %d, %f를 이용해 변수의 값을 문자열에 포함시키는 예제 코드이다.

a="도윤"
b="축구"
c=3
d=99.5
e="나는 어제 %s이랑 %s를 했어."
f="%s이는 축구공을 %d개 가지고 있어."
g="%s이의 이번 시험 평균 점수는 %5.1f점이야."
print(e %(a, b))
print(f %(a, c))
print(g %(a, d))

>1text5.py
나는 어제 도윤이랑 축구를 했어.
도윤이는 축구공을 3개 가지고 있어.
도윤이의 이번 시험 평균 점수는 99.5점이야.
변수 a에 “도윤”, 변수 b에 “축구”, 변수 c에 3, 변수 d에 99.5를 대입하고, 변수 e에는 “나는 어제 %s이랑 %s를 했어.”와 같이 두 변수의 값을 문자열에 포함시켰다. print() 함수를 이용해 첫 번째 변숫값에는 변수 a를, 두 번째 변숫값에는 변수 b를 포함시킨 후 출력하면 “나는 어제 도윤이랑 축구를 했어.”가 출력된다. 변수 f에는 “%s이는 축구공을 %d개 가지고 있어.”와 같이 문자열 변수와 정수 변수를 한 개씩 포함시켰다. 출력하면 “도윤이는 축구공을 3개 가지고 있어.”가 출력된다. 변수 g에는 문자열 변수와 실수 변수를 한 개씩 포함시켰다. 이때 실수형 변수를 %f의 형태로만 넣어주면 제법 많은 자릿수의 실수가 출력되는데 간단하게 출력하기 위해 %5.1f의 형식을 사용했다. 앞의 5는 실수가 차지하는 전체 자릿값을 의미하며 소수점 뒤의 1은 소수점 아래 첫째 자리까지만 출력하라는 의미이다. 소수점 아래 더 많은 숫자가 있을 경우 둘째 자리에서 반올림해서 첫째 자리까지만 출력된다. 따라서 변수 g를 출력하면 “도윤이의 이번 시험 평균 점수는 99.5점이야”가 출력된다.
나. 슬라이싱
문자열의 일부를 분리해내는 것을 ‘슬라이싱(Slicing)’이라고 한다. 문자열은 파이선의 데이터 형식인 순서열 형식의 한 종류로 문자열을 분리할 때에는 대괄호 연산자 [와]을 사용한다. 다음은 대괄호 연산자를 이용한 슬라이싱의 예제 코드이다.

a="hellopython"
b=a[0:5]
print(b)

>1text6.py
hello
b=a[0:5]라는 명령은 b에 문자열 a의 0번째 문자부터 5번째 문자 앞까지를 분리해서 대입하는 것을 말한다. 파이선에서는 순서를 셀 때 1이 아닌 0부터 시작한다. 숫자를 포함한 문자는 물론 공백 모두 하나의 문자로 인식한다. ‘hellopython’에서 가장 앞의 h는 0번 문자가 되는 것이다. 대괄호 안의 0과 5는 문자열을 분리할 때 0번째 문자부터 5번째 문자 앞까지를 분리하는 것을 의미한다. 문자열의 처음부터 슬라이싱하거나 마지막까지 슬라이싱 하려고 한다면 첫 번째 매개 변수 또는 마지막 매개 변수는 생략할 수 있다. 또한 특정 위치의 문자를 참조하고자 할 때는 대괄호 안에 해당 문자의 첨자 번호만 입력하면 된다. 다음은 매개변수를 생략한 경우와 특정 위치의 문자를 참조한 경우의 예시 코드이다.

a="Hello python"
b=a[:5]
c=a[6:]
d=a[1]
print(b)
print(c)
print(d)

>1text7.py
Hello
python
e
변수 a에 “Hello python”을 대입한 후 변수 b는 처음부터 5번째 문자 앞까지의 문자열을, 변수 c는 6번째 문자부터 끝까지의 문자열을, 변수 d는 1번째 문자를 대입하도록 한 후 출력한 결과이다. 가장 앞의 문자는 0번째 문자이며, 공백도 하나의 문자로 인식함을 잊지 않도록 하자.
다. 탐색
문자열 안에 원하는 문자가 있는지 탐색하려고 할 때 in 연산자를 사용한다. 원하는 문자가 있으면 True 값을, 그렇지 않다면 False의 값을 가지게 된다. 다음은 in 연산자를 사용한 예제 코드이다.

a="Hello python"
b='Hello' in a
c='Hi' in a
print(b)
print(c)

>1text8.py
True
False
변수 a에 “Hello python”을 대입한 후 ‘Hello’의 존재 여부를 변수 b에, ‘Hi’의 존재 여부를 변수 c에 대입한다. 변수 b와 변수 c를 출력할 경우 ‘Hello’는 문자열에 있기 때문에 변수 b는 True값을, ‘Hi’는 문자열에 없기 때문에 변수 c는 False값을 가지게 된다.
라. 길이
문자열과 같은 순서열의 길이를 잴 때 len()이라는 함수를 사용한다. 다음은 len() 함수를 사용한 예제 코드이다.

a="Hello python"
print(len(a))

>1text9.py
12
변수 a에 “Hello python”을 대입한 후 print() 함수와 len() 함수를 이용해 문자열의 길이를 출력한다.
마. 코딩해 보기
1) “안녕 만나서 반가워.”라는 문자열 중 ‘반가워.’ 부분만 출력할 수 있게 코딩해 보자.
a="안녕 만나서 반가워."
b=a[7:]
2) “선생님! 오늘 날씨가 너무 더워요.”라는 문자열의 길이를 출력하는 프로그램을 코딩해 보자.
b="선생님! 오늘 날씨가 너무 더워요."
print(len(b))