cse117 프로그래밍기 강의노트 - home [plasse] · pdf filecse117 프로그래밍기초...

18
CSE117 1 1. , , , Strings, Numbers, Variables and Input/Output ERICA20132(version 0.4.2) 1 c (2013). ERICA니다. 의이자의 니다.

Upload: lenhan

Post on 07-Feb-2018

238 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

CSE117 프로그래밍기초

강의노트 1

1.

문자열, 수, 변수, 입출력

Strings, Numbers, Variables and Input/Output

한양대학교 ERICA캠퍼스 컴퓨터공학과

도경구

2013년 2학기

(version 0.4.2)

1 c©도경구(2013). 본 문서는 한양대학교 ERICA캠퍼스 컴퓨터공학과 프로그래밍기초 강의용으로 제

작되었습니다. 강의 이외의 용도로 저자의 허락없이 무단 복제하여 배포할 수 없습니다.

Page 2: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

프로그램에서 가장 흔히 사용하는 기본 데이터인 문자열과 수를 표현하는 방식과 관련 연

산자를 공부하고, 변수, 지정명령문 및 입출력 개념을 이해한다.

1. 문자열

문자열string은 문자character를 일렬로 나열해 놓은 것이다.

1.1 한줄 문자열

Python에서 문자열은 나열된 문자들 양쪽 끝에 큰따옴표(")나 작은따옴표(’) 문자를 붙여서

표현한다. 이 때 큰따옴표로 시작한 문자열은 반드시 큰따옴표로 끝나며, 작은따옴표로 시작한

문자열은 작은따옴표로 끝나야 한다. 이를 문자열 표현식string expression이라고 하며, 문자열

표현을제대로했는지는 Python인터프리터interpreter(실행기)로다음과같이확인해볼수있다.

>>> ’Computer Science’

’Computer Science’

>>> "Programming in Python"

’Programming in Python’

>>> "Hanyang University ERICA’

SyntaxError: EOL while scanning string literal

같은 모양의 따옴표로 둘러싸지 않으면 Python 인터프리터는 문자열로 인식하지 못하여, 구문

오류syntax error가 발생했다는 오류메시지와 함께 비정상적으로 계산을 종료한다.

print() 함수function를 써서 문자열 내용을 Python Shell 창에 보여줄 수 있다. 따옴표는

단지 문자열의 시작과 끝을 구분해주는 문자일 뿐이므로, 문자열을 창에 프린트하면 따옴표는

보여주지 않는다. 즉,

>>> print("Computer Science")

Computer Science

>>> print(’Programming in Python’)

Programming in Python

print() 함수에 인자arguments로 2개 이상의 문자열을 한꺼번에 주면, 각 문자를 같은 줄에

차례로 프린트하며 각 문자열 사이에 빈칸을 한칸씩 띄워준다. 즉,

>>> print(’Programming’, ’in’, ’Python’)

Programming in Python

1

Page 3: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

1.2 여러줄 문자열

줄바꾸기가 들어가서 여러줄로 구성된 문자열은 큰따옴표를 3개 연속 양쪽끝에 붙이거나 작은

따옴표를 3개 연속 양쪽끝에 붙여서 표현한다. 예를 들면,

>>> ’’’

Welcome to

the world of

computer science!

’’’

’\nWelcome to\n the world of\n computer science!\n’

예에서 볼 수 있듯이, 연속된 따옴표 3개로 둘러싼 문자열에서 줄바꾸기는 모두 줄바꿈문자

(\n)로 표현할 수도 있다.

>>> print(’\nWelcome to\n the world of\n computer science!\n’)

Welcome to

the world of

computer science!

>>> print(’Welcome to\n the world of\n computer science!’)

Welcome to

the world of

computer science!

1.3 문자열 붙이기

대표적인 문자열 연산으로 문자열붙이기string concatenation가 있다. 붙이고 싶은 두 문자열

사이에 더하기(+) 연산자를 넣어서 문자열붙이기 표현식을 만든다.

>>> ’Computer’ + "Science"

’ComputerScience’

>>> "Computer" + " " + ’Science’

’Computer Science’

연산자를 사용하는 대신 그냥 문자열을 일렬로 나열하여 문자열붙이기를 할 수도 있다. 예를

들면,

>>> "Computer" "Science"

’ComputerScience’

2

Page 4: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

>>> "Computer" " " "Science"

’Computer Science’

여기서 " "는 빈칸 하나로 구성된 문자열이다.

문자가 하나도 없는 문자열은 빈문자열empty string이라고 하며, "" 또는 ’’로 표현한다.

>>> ""

’’

>>> "Python" + ""

’Python’

Python에서문자열과수1의붙이기는허용하지않는다.즉, Python인터프리터에서실행해보면

타입이 맞지 않아 실행할 수 없다는 타입오류type error 메시지를 늘어놓으며 계산이 비정상적

으로 종료된다.

>>> ’Apollo’ + 11

Traceback (most recent call last):

File "<pyshell#0>", line 1, in <module>

’Apollo’ + 11

TypeError: Can’t convert ’int’ object to str implicitly

앞 세줄은 오류가 발생한 정확한 위치를 알려주며, 마지막 줄은 어떤 오류가 발생했는지 설명

해준다.이메시지를해독해보자면이렇다. +연산을문자열붙이기로쓰려는것같은데,오른쪽

피연산자 11이 문자열이 아니므로 타입이 맞지 않고, 수를 문자열로 자동으로 바꿔줄 수 없다

고 불평한다. 문자열 뒤에 11을 붙이고 싶다면 다음과 같이 str 연산자를 써서 수 11을 문자열

"11"로 바꾸어야 한다.

>>> ’Apollo’ + str(11)

’Apollo11’

같은 문자열을 여러번 반복해서 붙이고 싶은 경우에는 곱하기(*) 연산자를 사용한다. 예를

들면,

>>> ’Pooh’ * 5

’PoohPoohPoohPoohPooh’

>>> ’Pooh’ * 0

’’

>>> ’Pooh’ * -3

’’

1수를 표현하는 방식은 다음 절에서 자세히 살펴볼 것이다.

3

Page 5: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

음수는 0과 같이 취급한다.

1.4 특수문자

문자열의 시작과 끝을 표시하는 따옴표 문자를 구분문자delimiter라고 한다. 그런데 만약 문자

열을 둘러싸고 있는 따옴표를 문자열 내부에 넣고 싶으면 어떻게 할까?

>>> ’Halley’s Comet’

SyntaxError: invalid syntax

위와 같이 그냥 넣어버리면 두번째 작은따옴표를 문자열의 끝으로 인식해버리고, 세번째 따옴

표는 짝이 없는 따옴표가 되어 오류처리되었다. 해결 방법으로는 두가지가 있다.

• 모양이 다른 따옴표 문자를 사용한다. 즉 큰따옴표를 넣고 싶으면 작은따옴표로 둘러싸

고, 작은따옴표를 넣고 싶으면 큰따옴표로 둘러싼다. 즉, 위의 예와 같이 작은따옴표를

문자열에 포함시키고 싶으면 문자열을 다음과 같이 큰따옴표로 둘러싼다.

>>> "Halley’s Comet"

"Halley’s Comet"

• 다음과같이역슬래시backslash(\)문자를따옴표문자앞에붙여서탈바꿈escape한다.탈바

꿈하면 따옴표 문자를 구분문자로 인식하지 않는다.

>>> ’Halley\’s Comet’

"Halley’s Comet"

줄바꿈이나 탭도 특수문자를 사용하여 문자열에 포함시킬 수 있다. 줄바꿈newline 문자는 \n으로, 탭tab 문자는 \t로 표현한다. 역슬래시 문자(\) 자체를 문자열에 포함시키고 싶으면 이를탈바꿈하여 \\로 표현한다.

2. 수

수는 정수integer와 실수(부동소수점수)floating-point number가 있다.

산술연산은 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 몫(//), 나머지(%), 지수승(**), 부호

바꾸기(-)가 있다. 각 연산자operator의 의미는 다음 산술표현식(산술식)numeral expression을

Python 실행기로 돌려보면 쉽게 파악할 수 있다.

>>> (3 + 8) * 2 - 7

15

>>> 7 / 5

1.4

4

Page 6: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

>>> 7 // 5

1

>>> 7 % 5

2

>>> 2 ** 3

8

>>> -(2 ** 3)

-8

이 중에서 부호바꾸기 연산자는 피연산자operand가 하나이고, 연산자가 앞에 위치한다. 나머지

연산자는 모두 피연산자가 둘이고 양쪽에 피연산자를 두고 연산자는 가운데 위치한다.

2 * 3 + 4과 같은 산술식은 어떤 연산을 먼저 하느냐에 따라 계산 결과가 달라진다. 곱셈

을 먼저 하면 10가 되고, 덧셈을 먼저 하면 14가 된다. 따라서 일반적으로 연산자에 우선순

위precedence를 미리 정해두고 그 순위에 따라 계산하도록 한다. 산술연산자의 우선순위를 가장

높은 것 부터 나열하면 다음과 같다.

1. 지수승(**)

2. 부호바꾸기(-)

3. 곱하기(*), 나누기(/), 몫(//), 나머지(%)

4. 더하기(+), 빼기(-)

따라서 위의 산술식의 연산을 Python 실행기로 실행해보면 다음과 같다.

>>> 2 * 3 + 4

10

덧셈을 먼저 계산하고 싶으면 다음과 같이 괄호로 우선순위를 지정한다.

>>> 2 * (3 + 4)

14

같은 연산자끼리도 계산순서에 따라 결과가 달라질 수 있다. 예를 들어, 2 - 3 - 4의 경우,

왼쪽부터 계산을 하면 결과가 -5가 되고, 오른쪽부터 계산을 하면 결과가 3이 된다. 왼쪽부

터 계산을 하면 좌결합left associative이라고 하고, 오른쪽부터 계산을 하면 우결합right associative

이라고 한다. 일반적으로 곱하기(*), 나누기(/), 몫(//), 나머지(%) 더하기(+), 빼기(-)는 모두

좌결합으로 정하고, 지수승(**)만 우결합으로 정한다.

>>> 2 - 3 - 4

-5

5

Page 7: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

>>> 2 ** 3 ** 4

2417851639229258349412352

결합을 바꾸고 싶으면 다음과 같이 괄호를 사용한다.

>>> 2 - (3 - 4)

3

>>> (2 ** 3) ** 4

4096

실수 계산의 경우 메모리에 실수를 표현하는 방식때문에 계산 오차가 발생할 수 있어 조심

해야 한다.

>>> 3 * 3.14

9.42

>>> 3 * 3.1415

9.4245

>>> 3 * 3.14159

9.424769999999999

>>> 7 / 3

2.3333333333333335

3 * 3.14159는 계산결과가 9.42477이 나와야 맞는데 9.424769999999999가 나왔다. 7 / 3은

2.3333333333333333이나와야맞는데 2.3333333333333335와같은이상한결과가나왔다.왜

틀린결과가나올까?기대밖의틀린계산결과는소수점이하의수를표현하는방식때문에어쩔

수 없이 발생하는 오차이다. 따라서 실수 계산은 항상 주의해서 다루어야 한다.

타입변환 함수를 사용하여 값의 타입을 바꿀 수 있다. Python에서 제공해주는 타입변환

함수를 몇개만 살펴보자.

• int(x) : x를 정수로 바꾼다. 실수는 소수점 이하를 버린다.

>>> int(3.14)

3

>>> int("747")

747

>>> int("3.14")

Traceback (most recent call last):

File "<pyshell#19>", line 1, in <module>

int("3.14")

ValueError: invalid literal for int() with base 10: ’3.14’

6

Page 8: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

• float(x) : x를 실수로 바꾼다.

>>> float(747)

747.0

>>> float("3.14")

3.14

>>> float("747")

747.0

• str(x) : x를 문자열로 바꾼다.

>>> str(747)

’747’

>>> str(3.14)

’3.14’

3. 변수와 지정명령문

값을 저장해두고 이름을 붙여두었다가 언제든지 불러(꺼내)쓰기 위한 방편으로 변수variable를

사용한다. 따라서 변수는 값이 저장되어 있는 위치를 가리키는 이름이라고 보면된다. 변수가

가리키는저장장소에값을저장하는작업을지정assignment이라고하며,지정명령문assignment

command은 다음과 같이 쓴다.

>>> width = 4

>>> height = 7

이두지정명령문의의미는각각 ”4를메모리어디에저장한다음,저장되어있는주소의이름을

width라고 하고”, ”7을 메모지 어디에 저장한 다음, 저장되어 있는 주소의 이름을 height라고

한다”이다. 일단 값이 저장되어 있는 위치를 변수로 지정해두었으므로, 언제든지 다음과 같이

그 변수이름을 불러 그 위치에 저장되어 있는 값을 꺼내볼 수 있다.

>>> width

4

>>> height

7

>>> width * height / 2

14.0

변수로 지정된 값은 언제나 지정명령문으로 지우고 새로 고칠 수 있다.

7

Page 9: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

>>> height = height - 1

>>> height

6

>>> width * height / 2

12.0

지정명령문을실행하면새값이저장되므로,전에저장되어있던값은지워지고영원히복구가

불가능하다.

변수는 쓰기 전에 반드시 값이 지정되어 있어야 한다. 다음과 같이 지정되어 있지 않은 변

수의 값을 불러보면, 그런 이름은 값이 지정되어 있지 않다고 불평하며 오류메시지를 내준다.

>>> pooh

Traceback (most recent call last):

File "<pyshell#33>", line 1, in <module>

pooh

NameError: name ’pooh’ is not defined

다음과 같이 같은 값을 여러 변수에 동시에 지정할 수도 있다.

>>> x = y = z = 0

>>> x

0

>>> y

0

>>> z

0

변수 이름은 반드시 숫자(0-9), 문자(a-z, A-Z), 아래줄( )의 조합으로만 만들어야 하며,

숫자로 시작할 수 없다.

>>> erica13 = 2013

>>> 13erica = 2013

SyntaxError: invalid token

>>> pythonProgramming = "easy"

>>> python_programming = "fast"

변수 작명은 잘해야 한다. 변수에 저장되어 있는 값을 잘 대변해줄 수 있는 이름을 지으면 프로

그램 가독성을 높일 수 있어서 좋다. 변수 이름을 만드는데 고려해야 하는 사항을 나열해보면

다음과 같다.

8

Page 10: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

• 값의 의미가 잘 나타나는 이름을 고를 것

• 일관성을 유지할 것

• 관습을 따를 것 (예: 일반 변수는 주로 소문자로 시작)

• 너무 길게 만들지 말 것

값을 한 번 쓰고 마는 경우에는 굳이 변수를 지정할 필요가 없다. 그러나 위 예와 같이 같은

값을 반복해서 쓰는 경우에 반복되는 값을 변수로 지정해두고 불러쓰면 간편하다.

4. 표준 입출력

4.1 표준 출력

앞에서 이미 보아서 알고 있겠지만 다시 한번 정리해보자. Python Shell 창에 출력하는 기능을

표준 출력standard output이라고 하고, print() 함수가 이를 수행한다. 괄호 안에는 출력할 하나

이상의문자열또는숫자를쉼표로구분하여나열한다.쉼표로구분된데이터사이에는빈칸이

자동으로 삽입된다. 예를 들면,

>>> print(5,’days has’,5*24,’hours.’)

5 days has 120 hours.

>>> print(7,’days has’,7*24,’hours.’)

7 days has 168 hours.

여러번 반복 사용하는 데이터는 변수를 지정하여 다음과 같이 쓸 수 있다.

>>> d = ’days has’

>>> h = ’hours.’

>>> days = 5

>>> print(days,d,days*24,h)

5 days has 120 hours.

>>> days = days + 2

>>> print(days,d,days*24,h)

7 days has 168 hours.

4.2 표준 입력

사용자의 입력을 Python Shell 창에서 받는 기능을 표준 입력standard input이라고 하고, 이를

수행하는 input() 함수는 다음과 같은 순서로 작동한다.

1. input() 함수가 실행되면 입력창에서 커서cursur를 깜빡이며 사용자 입력을 기다린다.

9

Page 11: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

2. 사용자가 입력창에 원하는 문자열을 입력하고 리턴return키를 누른다.

3. 사용자 입력을 문자열로 내준다.

다음 예를 Python Shell 창에서 시도해보자.

>>> input()

5

’5’

깜빡이는 커서에 5를 입력하고 리턴키를 누르면 읽어들인 문자열 ’5’를 보여준다. 입력받은

데이터를 수로 사용하고 싶으면 다음과 같이 타입변환 함수 int()를 써서 정수로 바꾸면 된다.

>>> int(input())

5

5

읽어들인 데이터를 추후에 쓰려면 다음과 같이 바로 변수를 지정하여 저장해둔다.

>>> days = int(input())

5

>>> days

5

사용자로부터 날짜수를 입력받아서 그 날짜에 해당하는 총 시간 수를 계산해서 프린트하는

프로그램을 만들어보자. 표준 입력 함수 input(x)의 인수 x 부분에 문자열을 넣어주면, 그 문

자열을프린트한후그뒤에서커서가반짝이며입력을기다린다.사용자에게입력할데이터의

힌트를 줄 수 있어서 유용하게 쓸 수 있다.

>>> days = int(input(’Type an integer: ’))

Type an integer: 5

>>> print(days,’days has’,days*24,’hours.’)

5 days has 120 hours.

이 프로그램을 실행하고 싶을 때마다 프로그램을 재입력하여 실행하는 것은 성가신 작업이다.

따라서 프로그램은 파일로 작성해서 저장해두었다가 필요할 때마다 불러쓰면 좋다.

5. 프로그램을 파일에 작성하고 실행하기

간편하게쓸수있는편집기를고르자. Python홈페이지에서제공하는설치파일에서같이제공

하는 IDLE을 사용하길 권장한다. 써보면 프로그램을 작성하기 꽤 좋은 편집기임을 곧 알아챌

10

Page 12: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

것이다. 새 편집창을 하나 띄워서 다음 프로그램을 작성하여 days2hours.py라는 이름으로 저

장해보자. 2

1 days = int(input(’Type a nonnegative integer: ’))

2 print(days,’days has’,days*24,’hours.’)

저장할 장소는 각자 알아서 편한대로 정하기 바란다. 프로그램이 있는 폴더에서 다음과 같이

실행해보자.

$ python3 days2hours.py

Type a nonnegative integer: 5

5 days has 120 hours.

6. 주석

days2hours.py에작성한프로그램은사용자가지시에잘따라서적절한크기의정수만입력하

면 완벽히 실행되는 프로그램이다. 그런데 프로그램의 실행에 영향을 미치지 않게 프로그램에

관련된주요정보를주석comments으로적어두면프로그램을관리하는데좋다.주석은실행코드

와구별할수있게표시하므로실행할때는인터프리터가완전히무시한다. Python프로그램은

# 문자가 나오는 지점부터 해당 줄이 끝나는 지점까지 모두 주석처리 하여 인터프리터가 무시

한다.

프로그램의 시작 부분에는 프로그램 파일 전반에 관한 주석을 달아두는게 좋으며, 다음

정도의 정보는 최소한 들어가도록 버릇을 들이자.

• 프로그램의 이름

• 프로그램에 대한 간단한 설명

• 만든이

• 만든 날짜와 버전 번호

days2hours.py에 저장되어 있는 프로그램에 다음과 같이 주석을 달 수 있다.

1 # 날짜 시간 변환기

2 # 사용자로 부터 날짜를 입력받아서 이를 시간단위로 변환해준다.

3 # 입력: 날짜를 표시하는 ’음이 아닌’ 정수

4 # 출력: 시간 (날짜의 24배)

5 # 작성자: 김현하

6 # 작성일: 2013.8.13 (version 1.1)

2Python 프로그램 파일의 이름에는 항상 .py라는 확장자를 붙인다.

11

Page 13: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

7

8 days = int(input(’Type a nonnegative integer: ’))

9 print(days,’days has’,days*24,’hours.’)

7. 프로그램 설계 및 구현

문자열과 수와 같은 기본 테이터를 표현하는 방법을 알았고, 변수의 개념, 그리고 표준 입출

력 방법을 배웠으니 프로그램을 설계하고 구현하는 절차를 살펴보자. 프로그램은 일반적으로

다음과 절차로 만든다.

1. 프로그램의 입출력 정의

2. 알고리즘 설계

3. 설계된 알고리즘을 기반으로 프로그램 작성

4. 실행검사test하면서 프로그램 보수

5. 문서화 작업 (주석달기)

알고리즘이란 문제를 푸는 절차를 말한다. 이 절차를 컴퓨터(여기서는 Python 인터프리터)가

이해하도록작성해놓은것이프로그램(여기서는 Python프로그램)이다.이제프로그램의설계

및 구현 절차를 사례를 통해서 체험해보자.

7.1 사례: 현금 재산 총액 계산하기

문제

가지고 있는 우리 나라 지폐 및 동전의 개수를 입력받아 재산 총액을 계산해주는 프로그램을

작성해보자.

입출력 정의

• 입력: 각 지폐의 장수 및 각 동전의 개수

• 출력: 현금 재산 총액 (단위: 원)

알고리즘

1. 가지고있는지폐의장수및동전의개수를고액권부터내림순으로입력받는다.즉,지폐

오만원권, 만원권, 오천원권, 천원권, 동전 오백원, 백원, 오십원, 십원 순으로 받는다.

2. 입력값을 가지고 재산의 총액을 계산한다. 즉, 각 지폐(동전)의 가치에 장(개)수를 곱한

후 모두 더한다.

3. 결과값을 창에 보여준다.

12

Page 14: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

프로그램

1. 입력 받는 부분부터 작성해보자. 사용자의 편의성을 위해서 지폐 및 동전을 액수를 알려

주면서 입력을 받는다. 입력받은 문자열은 정수로 변환한 후 각각 해당 변수에 저장한다.

print("한양 현금합산 서비스에 오신 것을 환영합니다!")

print("음수는 입력하지 마세요!")

p50000 = int(input("오만원짜리는 몇장입니까? "))

p10000 = int(input("만원짜리는 몇장입니까? "))

p5000 = int(input("오천원짜리는 몇장입니까? "))

p1000 = int(input("천원짜리는 몇장입니까? "))

c500 = int(input("오백원짜리는 몇개입니까? "))

c100 = int(input("백원짜리는 몇개입니까? "))

c50 = int(input("오십원짜리는 몇개입니까? "))

c10 = int(input("십원짜리는 몇개입니까? "))

2. 계산식을 작성한 후 계산 결과는 변수 total에 저장한다.

total = 50000 * p50000 + 10000 * p10000 + 5000 * p5000 + 1000 * p1000 \

+ 500 * c500 + 100 * c100 + 50 * c50 + 10 * c10

여기서 식이 길어서 줄을 넘어가는 경우 \로 줄끝에 표시하여 식이 계속됨을 반드시 표시해주어야 한다.

3. 결과값을 프린트 명령을 사용하여 다음과 같이 창에 보여준다.

print("당신의 현금 재산은", total, "원 입니다.")

print("한양 현금합산 서비스를 이용해주셔서 대단히 감사합니다.")

print("또 찾아주세요.")

실행검사

작성한 프로그램이 제대로 실행되는지 Python 인터프리터로 검사할 수 있다. 방금 작성한 프

로그램은 ’음이 아닌’ 정수를 입력하는 경우 오류없이 정확히 작동하도록 작성하였다. 한번

실행해보자.

그러나 오타 등으로 프로그램을 잘 못 작성한 경우 실행하기도 전에 오류가 발생하면서

멈출 수 있다. 이와 같은 부류의 오류는 주로 문법에 맞지 않게 프로그램이 작성되어 실행하기

전 발생하는 오류로 구문오류syntax error라고 한다. 예를 들면,

>>> 3 + 4 *

SyntaxError: invalid syntax

13

Page 15: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

>>> "ERICA’

SyntaxError: EOL while scanning string literal

문법에 맞게 프로그램을 작성하여 문법검사를 통과하면 프로그램은 일단 실행된다. 그러나

문제가 있으면 오류가 발생하면서 실행이 비정상적으로 멈출 수 있다. 이와 같이 실행 중 비

정상적으로 프로그램이 종료하는 오류를 실행오류run-time error라고 한다. 실행오류를 종류

별로몇가지만살펴보자.다음과같이연산자와피연산자들간에타입이맞지않아서발생하는

실행오류를 타입오류type error라고 한다.

>>> "1" + 2

Traceback (most recent call last):

File "<pyshell#2>", line 1, in <module>

"1" + 2

TypeError: Can’t convert ’int’ object to str implicitly

다음과 같이 정수를 표현하는 문자열이 있어야 하는데 그렇지 못해서 발생하는 실행오류를

값오류value error라고 한다.

>>> int("3.14")

Traceback (most recent call last):

File "<pyshell#3>", line 1, in <module>

int("3.14")

ValueError: invalid literal for int() with base 10: ’3.14’

문서화

프로그램을 완성하고 난 후 주석을 달아 적절히 문서화해야 한다. 다음은 주석을 단 프로그

램이다. 프로그램의 시작 부분에는 프로그램의 이름과 간단한 설명, 입출력, 작성자, 작성일,

버전을 명시한다. 전체 프로그램은 크게 세 부분으로 나뉘므로 사이사이에 한 줄씩 빈 줄을

두어 구분한다. 그리고 각 부분마다 맨 앞에 그 부분에 대한 간단한 설명을 붙였다.

1 # file: cash-totaling-service.py

2 # 현금합산서비스

3 # 우리나라 현금의 총액수를 계산해주는 프로그램

4 # 입력: 각 지폐/동전의 장수/개수

5 # 출력: 총 액수

6 # 작성자: 도경구

7 # 작성일: 2010년 9월 4일 (v1.0)

8

14

Page 16: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

9 # 사용자 입력 받음

10 print("한양 현금합산 서비스에 오신 것을 환영합니다!")

11 print("음수는 입력하지 마세요!")

12 p50000 = int(input("오만원짜리는 몇장입니까? "))

13 p10000 = int(input("만원짜리는 몇장입니까? "))

14 p5000 = int(input("오천원짜리는 몇장입니까? "))

15 p1000 = int(input("천원짜리는 몇장입니까? "))

16 c500 = int(input("오백원짜리는 몇개입니까? "))

17 c100 = int(input("백원짜리는 몇개입니까? "))

18 c50 = int(input("오십원짜리는 몇개입니까? "))

19 c10 = int(input("십원짜리는 몇개입니까? "))

20

21 # 총합 계산

22 total = 50000 * p50000 + 10000 * p10000 + 5000 * p5000 + 1000 * p1000 \

23 + 500 * c500 + 100 * c100 + 50 * c50 + 10 * c10

24

25 # 결과 출력

26 print("당신의 현금 재산은", total, "원 입니다.")

27 print("한양 현금합산 서비스를 이용해주셔서 대단히 감사합니다.")

28 print("또 찾아주세요.")

연습문제

1. 은행에서 대출을 받으려고 하다보면 워낙 상환방법이나 이자율이 복잡하여 얼마나 어떻

게 갚아나가야 하는지 감을 잡기 힘들다. 대출을 하고 장기적으로 갚아나가기를 원하는

고객에게 원금과 이자를 합하여 궁극적으로 얼마를 갚아야 하는지 알려주는 프로그램을

만들어보자. 대출 원금은 1백만원 이상만 허용하고, 상환기간은 연단위로 하고, 최소한

1년은 빌려야 한다고 가정하자. 복리를 적용하는 경우 원금principal p, 상환년수years y,

연이자율rate이 주어지면, 연상환금 d는 다음 식 (1)로 계산한다.

d =(1 + r)y × p× r

(1 + r)y − 1(1)

여기서 d는 대출자가 약정한 기간동안 매년 갚아야 하는 돈이다. 만약 12달로 나누어낸

다면 월상환금은 d/12이다. 원금, 상환년수, 이자율(백분율)을 사용자 입력으로 받아서,

연상환금, 월상환금, 상환금 총액을 출력하는 프로그램을 작성해보자. 액수는 원 단위로

표시해야 하므로 소수점 이하는 무시하고 버린다. 프로그램은 아래 템플릿에 맞게 작성

해야 한다.

15

Page 17: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

file: loan-payment.py

1 # 대출상환금 계산

2 #

3 # 대출금에 대해서 얼마나 갚아나가야 하는지 계산해주는 프로그램

4 #

5 # input: 원금(the principal) (>= 1,000,000) - 정수타입만 허용

6 # 상환기간(years) (>= 1) - 정수타입만 허용

7 # 연이자율(annual interest) 0.0-100.0(%) - 실수타입만 허용

8 # output: 연 상환금액, 월 상환금액, 총 상환금액

9 #

10 # 작성자: 아무개

11 # 날짜: 2013.9.10 (version 1.0)

12

13 # 입력과 입력확인

14 print("대출상환금 계산서비스에 오신걸 환영합니다.")

15

16

17

18

19

20

21 # 상환금 계산

22

23

24

25

26

27 # 출력

28

29

30

31

32 print("저희 서비스를 이용해주셔서 감사합니다.")

33 print("또 들려주세요.")

프로그램을 실행하면 다음과 같이 작동해야 한다.

16

Page 18: CSE117 프로그래밍기 강의노트 - home [PLASSE] · PDF fileCSE117 프로그래밍기초 강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output

17