CSE117 프로그래밍기초강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output 한양대학교 ERICA캠퍼스컴퓨터공학과도경구 2013년 2학기 (version 0.4.2) 1 c 도경구 (2013).

Similar documents
쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

OCW_C언어 기초

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - chap04-연산자.pptx

17장 클래스와 메소드

금오공대 컴퓨터공학전공 강의자료

PowerPoint 프레젠테이션

Microsoft PowerPoint - [2009] 02.pptx

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - chap-03.pptx

Microsoft PowerPoint - chap05-제어문.pptx

PowerPoint 프레젠테이션

OCW_C언어 기초

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint Presentation

untitled

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

금오공대 컴퓨터공학전공 강의자료

Microsoft Word - PLC제어응용-2차시.doc

KNK_C03_Expr_kor

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

PowerPoint 프레젠테이션

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

C# Programming Guide - Types

8장 문자열

Microsoft PowerPoint - KNK_C03_Expr_kor

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

본 강의에 들어가기 전

KNK_C02_form_IO_kor

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Microsoft PowerPoint - Lesson2.pptx

Microsoft PowerPoint - c2.ppt

Microsoft PowerPoint - Java7.pptx

슬라이드 1

Microsoft PowerPoint - chap06-4 [호환 모드]

슬라이드 1

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

문서의 제목 나눔고딕B, 54pt

ABC 2장

14장 파일

PowerPoint 프레젠테이션

설계란 무엇인가?

Data Structure

Microsoft PowerPoint - chap-02.pptx

Microsoft PowerPoint - ch01.ppt

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

PowerPoint Presentation

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

슬라이드 1

쉽게

C 프로그램의 기본

설계란 무엇인가?

3장 함수

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

PowerPoint Presentation

Microsoft PowerPoint - CP_02_Convert_To_C_02_Step.pptx

Microsoft PowerPoint - chap-02.pptx

chap 5: Trees

Microsoft PowerPoint - chap03-변수와데이터형.pptx

PowerPoint 프레젠테이션

컴파일러

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 2주차-1차시 (강의자료) ch01 - C Programming 기초 (part 2)

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

슬라이드 1

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

PowerPoint 프레젠테이션

03 상수, 변수, 자료형

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

Columns 8 through while expression {commands} 예제 1.2 (While 반복문의이용 ) >> num=0

강의 개요

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-05.pptx

3 권 정답

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - gnu-w09-c-chap

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

윈도우즈프로그래밍(1)

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

TEST BANK & SOLUTION

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

= " (2014), `` ,'' .." " (2011), `` ,'' (.)"

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Java ...


학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2

Microsoft PowerPoint UNIX Shell.ppt

11장 포인터

C++ Programming

Microsoft PowerPoint 웹 연동 기술.pptx

ABC 3장

Microsoft PowerPoint - 2장 변수와 자료형 pptx

Microsoft PowerPoint - chap03.ppt

Transcription:

CSE117 프로그래밍기초강의노트 1 1. 문자열, 수, 변수, 입출력 Strings, Numbers, Variables and Input/Output 한양대학교 ERICA캠퍼스컴퓨터공학과도경구 2013년 2학기 (version 0.4.2) 1 c 도경구 (2013). 본문서는한양대학교 ERICA 캠퍼스컴퓨터공학과프로그래밍기초강의용으로제 작되었습니다. 강의이외의용도로저자의허락없이무단복제하여배포할수없습니다.

프로그램에서가장흔히사용하는기본데이터인문자열과수를표현하는방식과관련연 산자를공부하고, 변수, 지정명령문및입출력개념을이해한다. 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

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

>>> "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

음수는 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

>>> 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

>>> 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

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

>>> 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

값의의미가잘나타나는이름을고를것 일관성을유지할것 관습을따를것 ( 예 : 일반변수는주로소문자로시작 ) 너무길게만들지말것값을한번쓰고마는경우에는굳이변수를지정할필요가없다. 그러나위예와같이같은값을반복해서쓰는경우에반복되는값을변수로지정해두고불러쓰면간편하다. 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

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

것이다. 새 편집창을 하나 띄워서 다음 프로그램을 작성하여 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) 2 Python 프로그램 파일의 이름에는 항상.py라는 확장자를 붙인다. 11

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

프로그램 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

>>> "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

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 + 23 5000 * p5000 + 1000 * p1000 \ + 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

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

17