• 검색 결과가 없습니다.

Y. Daniel Liang 길준민 · 정재화

N/A
N/A
Protected

Academic year: 2022

Share "Y. Daniel Liang 길준민 · 정재화"

Copied!
43
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

ISBN 978-89-7050-850-4 978-0-13-274718-9

Y. Daniel Liang

길준민 · 정재화

(2)

Chapter 2

프로그래밍 기초

(3)

2

.

1 들어가기

2

.

2 간단한 프로그램 작성하기

2

.

3 콘솔에서 입력 받기

2

.

4 식별자

2

.

5 변수, 할당문과 표현식

2

.

6 동시 할당문

2

.

7 이름 상수

2

.

8 수치 데이터 타입과 연산자

2

.

9 표현식과 연산자 우선순위

2

.

10 확장 할당 연산자

2

.

11 타입 변환과 반올림

2

.

12 사례 연구: 현재 시간 출력하기

2

.

13 소프트웨어 개발 과정

2

.

14 사례 연구: 거리 계산하기

• 예를 들어 여러분이 학자금 대출을 받아야 한다고 가정해보자. 


주어진 대출금, 대출기간, 연이율이 주어졌을 때, 월 상환금과 총 상환금을 계산 하는 프로그램을 작성할 수 있는가?

• 2장에서는 이러한 문제를 해결하는 프로그램을 어떻게 작성해야 하는지 제시한다.

CONTENTS

학습하기에 앞서

Ch2 프로그래밍 기초

(4)

• 간단한 계산을 수행하는 프로그램을 작성할 수 있다.

(2.2 절)

• input 함수를 사용하여 프로그램 사용자의 입력을 얻을 수 있다.

(2.3 절)

• 변수와 함수와 같은 항목에 이름을 붙인 식별자를 사용할 수 있다.

(2.4 절)

• 데이터를 변수에 할당할 수 있다.

(2.5절)

• 동시 할당을 수행할 수 있다.

(2.6절)

• 이름 상수를 정의할 수 있다.

(2.7절)

• +, -, *, /, //, %, ** 연산자를 사용할 수 있다.

(2.8 절)

• 수치 표현식을 작성하고 평가할 수 있다.

(2.9 절)

• 코딩을 단순화하기 위해 확장 할당 연산자를 사용할 수 있다.

(2.10절)

• int와 round 함수를 이용하여 수치 타입 변환과 반올림을 수행할 수 있다.

(2.11절)

• time.time( )을 사용하여 현재 시스템 시간을 구할 수 있다.

(2.12절)

• 소프트웨어 개발 절차를 이해하고 그 절차를 상환액 프로그램에 적용할 수 있다.

(2.13 절)

• 두 점 사이의 거리를 계산하고 그래픽으로 화면에 그릴 수 있다.

절)

학습목표

(5)

• 코드 2.1 원의 면적 계산

• 원의 면적을 계산하는 간단한 프로그램

예제로 프로그래밍 시작하기

(6)
(7)

01 # 반지름값을 radius에 할당한다.

02 radius = 20 03

04 # 넓이를 계산한다.

05 area = radius * radius * 3.14159 06

07 # 결과를 출력한다.

08 print("반지름이", radius, "인 원의 넓이는", area, "입니다.")

코드 2.1 원의 면적 계산 ComputeArea.py

프로그램 실행 추적

area 1256.636

radius 20

결과를 area에 할당 20을 radius

할당

콘솔에 메 시지를 출 력한다.

radius 는 20이라는

값을 저장하는 공간 = 변수

area는 면적 값을 저장하는 메모리 공간

= 변수

(8)

• pyCharm에서 입력하고 수행함

코드를 입력하는 부분

실행결과를 확인하는 부분

(9)

• input 함수 사용 : 사용자로부터 입력을 받아서 값을 저장할 수 있다

• variable = input("값을 입력하세요: ")

• eval 함수 사용

• var = eval(stringVariable)

• eval("51 + (54 * (3 + 2))") returns 321

콘솔에서 입력 받기

01 # 사용자로부터 반지름 값을 입력받는다.

02 radius = eval(input("반지름을 입력하세요: ")) 03

04 # 넓이를 계산한다.

05 area = radius * radius * 3.14159 06

07 # 결과를 출력한다.

08 print("반지름이", radius, "인 원의 넓이는", area, "입니다.") ComputeAreaWithConsoleInput.py

코드 2.2 반지름을 입력 받아 원의 면적 계산

01 # 사용자로부터 3개의 숫자를 입력받는다.

02 number1 = eval(input("첫 번째 숫자를 입력하세요: ")) 03 number2 = eval(input("두 번째 숫자를 입력하세요: ")) 04 number3 = eval(input("세 번째 숫자를 입력하세요: ")) 05

06 # 평균을 계산한다.

07 average = (number1 + number2 + number3) / 3 08

09 # 결과를 출력한다.

10 print(number1, number2, number3, "의 평균은", average, "입니다.")

코드 2.3 여러 개의 값을 입력 받아 원의 면적 계산 ComputeAverage.py

실행 실행

(10)

• eval() 함수 실습

• “1+2+3” 문자형에 대해 eval(“1+2+3”)함수를 적용하면 1+2+3의 결 과 6을 반환함

• eval은 실행 가능한 문자열(1+2, ‘hi ' + ‘there!' 같은 것)을 입력으로

받아 문자열을 실행한 결과값을 리턴하는 함수

(11)

• “홍길동”,”이순신”과 같이 사람을 구분하는 이름이 있듯이 변수를 구분하는 이름도 필요하다

• 이를 식별자라고 한다

• 파이썬에서 식별자는 문자, 숫자, 그리고 밑줄

(underscore, _)

로 구성된 일련의 문자들이다.

• 식별자는 문자 혹은 밑줄로 시작해야 하고 숫자로 시작해서는 안 된다.

• 식별자는 키워드가 될 수 없다.

(키워드 목록은 보충자료 A(파이썬 키워드)를 참조)

• 예약어(reserved word)로 불리는 키워드(keyword)는 파이썬에서 특별한 의미를 가진다.

• 예를 들어, import는 키워드인데 임의의 모듈을 프로그램에 임포트 할지를 파이썬 해석기에 알려준다.

• 식별자에는 길이 제한이 없다.

식별자

(12)

변수, 표현식

01 # 사용자로부터 반지름 값을 입력받는다.

02 radius = eval(input("반지름을 입력하세요: ")) 03

04 # 넓이를 계산한다.

05 area = radius * radius * 3.14159 06

07 # 결과를 출력한다.

08 print("반지름이", radius, "인 원의 넓이는", area, "입니다.")

변수(variavble)

01 y = 1 # 1을 변수 y에 할당한다.

02 radius = 1.0 # 1.0을 변수 radius에 할당한다.

03 x = 5 * ( 3 / 2 ) + 3 * 2 # 표현식의 결과를 x에 할당한다.

04 x = y + 1 # y와 1의 합을 x에 할당한다.

05 area = radius * radius * 3.14159 # 넓이(area)를 계산한다.

표현식(expression)

• 변수

• 표현식

radius 는 사용자가 입력한 값을 저장하는 변수 - 다른 변수와 구별되는 이름(식별자)를 가짐

area 는 원의 면적을 계산한 후 이 값을 저장하는 곳

- radius 라는 변수를 이용하여 계산된 값을 저장

(13)

일반 할당문 / 동시 할당문

x = 1 # 1을 변수 x에 할당한다 x = x + 1

i = j = k = 1

일반 할당문

• 일반 할당문 • 동시 할당문

01 # 사용자로부터 3개의 숫자를 입력받는다.

02 number1, number2, number3 = eval(input(

03 "세 개의 숫자를 콤마(,)로 구분하여 입력하세요: ")) 04

05 # 평균을 계산한다.

06 average = (number1 + number2 + number3) / 3 07

08 # 결과를 출력한다.

09 print(number1, number2, number3 10 "의 평균은", average, "입니다.")

ComputeAreaWithSimultameousAssignment.py

코드 2.4동시 할당 명령문을 사용하여 3개의 숫자를 입력받고 평균을 계산

var1, var2, ..., varn = exp1, exp2, ..., expn 동시 할당문

var1, var2, ..., varn = exp1, exp2, ..., expn

(14)
(15)

• 프로그램이 실행되는 동안 변수의 값은 바뀔 수 있지만,


이름 상수 (named constant) 혹은 상수 (constant) 는 절대로 바뀌지 않는
 영구적인 데이터를 가지고 있다.

• 파이썬은 상수에 이름을 붙이는 것에 대해 특별한 문법을 가지고 있지는 않다.

• 상수를 나타내기 위해 단순히 변수를 생성하나, 상수와 변수를 서로 구별하기 위해 상수에는 대문자를 사용하여 이름을 붙인다.

이름 상수

(16)

• 수치 데이터 타입

• 정수(integer): e.g., 3, 4

• 실수: e.g., 3.0, 4.0 (소수점 아래 숫자가 있음)

수치 데이터 타입, 연산자

연산자 의미 예 결과

+ 덧셈 34 + 1 35

- 뺄셈 34.0 - 0.1 33.9

* 곱셈 300 * 30 9000

/ 실수 나눗셈 1 / 2 0.5

// 정수 나눗셈 1 // 2 0

** 누승 4 ** 0.5 2.0

% 나머지 20 % 3 2

• 연산자

(17)

% 연산자(나머지 연산자)

• % 연산자는 나머지

(remainer)

혹은 모듈로

(modulo)

연산자라고 불린다.

• % 연산자는 나눗셈이 수행된 후 나머지 값을 결과로 산출한다.

예를 들어, 짝수 % 2의 결과는 항상 0이며, 홀수 % 2의 결과는 항상 1이다. 


그래서 어떤 숫자가 홀수인지 짝수인지를 결정하기 위해 나머지 연산자를 사용할 수 있다. 


만일 오늘이 토요일이면, 7일 후에 다시 토요일이다.


친구와 10일 후에 만난다고 가정해 보자. 그러면 10일 후는 어떤 요일이 될까?


다음 표현식을 사용하여 화요일이라는 것을 알 수 있다.

2 7 6 1 3

3 12 12 0 4

3 26 24 2 8

1 20 13 7

젯수 13 피젯수

나머지

(6 + 10) % 7 = 2

토요일은 일주일에서 6번째 날 일주일은 7일

(18)

• 초단위의 시간에서 분 값과 나머지 초 값을 얻어내는 프로그램을 작성

문제: 시간 출력하기

01 # 사용자로부터 입력을 받는다.

02 seconds = eval(input("초 값을 정수로 입력하세요: ")) 03

04 # 분 값과 나머지 초 값을 얻는다.

05 minutes = seconds // 60 # 초 단위의 시간에서 분 값을 계산한다.

06 remainingSeconds = seconds % 60 # 나머지 초 값을 계산한다.

07 print(seconds, "초는", minutes,

08 "분과", remainingSeconds, "초입니다.")

코드 2.5 초 단위의 시간에서 분 값과 나머지 초 값을 얻어내는 프로그램

DisplayTime.py

실행

(19)

• 오버플로우

• 메모리에 저장하기에

(크기 측면에서)

너무 큰 값을 변수에 할당한다면, 
 오버플로우

(overflow)

가 발생한다.

오버플로우와 언더플로우

• 언더플로우

• 실수가 0에 가까울 정도로 매우 작으면 언더플로우

(underflow)

가 발생하고,
 파이썬은 이 값을 0으로 근사시킨다.

• 그러므로 언더플로우는 크게 걱정할 필요가 없다.

Python Shell

>>> 245.0 ** 1000

OverflowError: 'Result too large‘

>>>

(20)

• 부동소수점 표현은 과학적 표기법으로 표현될 수도 있다.

• 예를 들어

• 1.23456e+2

(또는 1.23456e2)

= 123.456

• 1.23456e-2 = 0.0123456

• 지수를 나타내는 E ( 또는 e) 는 소문자, 대문자 의미가 동일하다.

과학적 표기법 / 산술 연산식

 

(3 + 4 * x) / 5 - 10 * (y - 5) * (a + b + c) / x + 9 * (4 / x + (9 + x) / y) 파이썬 표현식

• 위 식은 다음과 같이 변환된다

• 산술 연산식

(21)

• 파이썬은 표현식 평가를 위한 자체 방식을 가지고 있지만, 


파이썬 표현식과 이와 대응하는 산술식의 결과는 서로 동일하다. 


그러므로 파이썬 표현식을 평가할 때 산술식의 규칙을 그대로 적용할 수 있다.

표현식 평가

(1) 괄호 내부가 먼저 계산된다.

(2) 곱셈 (3) 곱셈 (4) 덧셈

(5) 덧셈 (6) 뺄셈

3 + 4 * 4 + 5 * (4 + 3) - 1

3 + 4 * 4 + 5 * 7 - 1

3 + 16 + 5 * 7 - 1

3 + 16 + 35 - 1

19 + 35 - 1

54 - 1

53

(22)

연산자 예 의미

+= i += 8 i = i + 8

-= i -= 8 i = i - 8

*= i *= 8 i = i * 8

/= i /= 8 i = i / 8

/= i /= 8 i = i / 8

%= i %= 8 i = i % 8

**= i **= 8 i = i ** 8

확장 할당 연산자 / 타입 변환과 반올림

• 확장 할당 연산자

• 타입 변환과 반올림

• datatype(value) 예 int(4.5) => 4
 float(4) => 4.0
 str(4) => “4”

• round(4.6) => 5

• round(4.5) => 4

(23)

• 소수점 이하 둘째 자리까지 판매세를 출력하는 프로그램을
 작성하시오.

문제: 소수점 이하 둘째 자리 유지하기

01 # 사용자로부터 입력을 받는다.

02 purchaseAmount = eval(input("총 구입액을 입력하세요: ")) 03

04 # 판매세를 계산한다.

05 tax = purchaseAmount * 0.06 06

07 # 소수점 이하 2자리를 갖는 판매세를 출력한다.

08 print("판매세는", int(tax * 100) / 100.0), "입니다.")

코드 2.6소수점 이하 둘째 자리까지 판매세를 출력하는 프로그램

SalesTax.py

실행

(24)

• 평균시 (Greenwich Mean Time; GMT) 인 현재 시간을 13:19:14와 같이
 시:분:초 형태로 화면에 출력하는 프로그램

사례연구: 현재 시간 출력하기

• time 모듈에 있는 time() 함수는 그림 2.1에서 볼 수 있듯이 1970년 1월 1 일을 00:00:00 시간으로 하여 이 시간부터 현재 시간까지 경과된 시간을 밀리초 단위로 반환한다. (1970 은 유닉스 운영체제가 공식적으로 도입된 연도이다)

• time() 함수를 이용하여 현재 시간을 얻은 후에, 다음과 같이 현재 시간에

대한 시, 분, 초 값을 계산할 수 있다.

(25)
(26)
(27)
(28)

요구 명세

시스템 분석

시스템 설계

구현

테스팅

배포

유지보수

소프트웨어 개발 과정

(29)

요구 명세

시스템 분석

시스템 설계

구현

테스팅

배포

유지보수

요구 명세

• 소프트웨어 개발 과정

해결할 문제를 이해하고 소프트웨어 시스템이 무엇 을 해야 하는지를 상세히 문서화하기 위한 정형적

이 책에서 제시된 대부분의 예제는 간단하므로 요 구 또한 명확하다. 그러나 실세계의 문제는 항상 잘 정의되어 있는 것은 아니다.

(30)

요구 명세

시스템 분석

시스템 설계

구현

테스팅

배포

유지보수

시스템 분석

출력이 무엇인지 우선 확인해보고, 그런 다음 해당 출력을 산출하기 위해 어떤 데이터가 입력으로 필 요한지 알아낸다.

데이터의 흐름을 분석하고 시스템의 입·출력을 확 인하는 단계이다.

• 소프트웨어 개발 과정

(31)

요구 명세

시스템 분석

시스템 설계

구현

테스팅

배포

유지보수

시스템 설계

이 절차는 해결할 문제를 쉽게 다룰 수 있는 컴포넌 트로 분할하기 위해 여러 단계의 추상화를 사용하 고 각 컴포넌트를 구현하기 위한 설계 전략을 포함 하고 있다.


입력에서 출력을 얻기 위한 프로세스를 설계하는 단계이다.

• 소프트웨어 개발 과정

(32)

시스템 분석과 설계의
 핵심은 입력, 처리, 출력


(input, process, output; IPO)이다.

요구 명세

시스템 분석

시스템 설계

구현

테스팅

배포

유지보수

Input, Process, Output (IPO)

입력, 처리, 출력

• 소프트웨어 개발 과정

(33)

요구 명세

시스템 분석

시스템 설계

구현

테스팅

배포

유지보수

구현

이 단계에서 파이썬과 같은 프로그래밍 언어의 사 용이 필요하다. 구현은 코딩(coding), 자가 테스팅 (self testing), 그리고 디버깅(debugging 코드에 서 버그(bug)라 불리는 오류를 찾는 것) 과정을 포 시스템 설계를 프로그램으로 전환하는 것이다. 개 별 프로그램은 각 컴포넌트별로 작성되며, 그런 다 음 이들을 서로 통합시키는 단계이다.

• 소프트웨어 개발 과정

(34)

테스팅 요구 명세

시스템 분석

시스템 설계

구현

배포

유지보수

테스팅

일반적으로, 소프트웨어 제품의 설계와 구현에 관 여하지 않은 소프트웨어 엔지니어들이 테스팅을 수 행한다.

코드가 요구 명세와 일치하고 버그가 제거되었는 지를 확인하는 단계이다.

• 소프트웨어 개발 과정

(35)

테스팅 요구 명세

시스템 분석

시스템 설계

구현

테스팅

배포

유지보수

배포

소프트웨어를 사용 가능하도록 만들어 주는 
 단계이다.

• 소프트웨어 개발 과정

(36)

요구 명세

시스템 분석

시스템 설계

구현

테스팅

배포

유지보수

관리

소프트웨어 제품은 끊임없이 진화하는 환경에서 실 행되고 개선되어야 한다. 이 단계에서 새로 발견된 버그를 수정하고 변경사항을 반영하기 위해 소프트 웨어 제품의 주기적 업그레이드가 필요하다.

소프트웨어 제품의 업데이트와 기능 개선과 
 관련되어 있다.

• 소프트웨어 개발 과정

(37)

• 대출 상환금을


계산하는 프로그램

사례 연구: 대출 상환금을 계산

01 # 퍼센트 서식으로 연이율을 입력한다. 예를 들어, 7.25 02 annualInterestRate = eval(input(

03 "연이율을 입력하세요(예. 7.25): "))

04 monthlyInterestRate = annualInterestRate / 1200 05

06 # 상환년수를 입력한다.

07 numberOfYears = eval(input(

08 "상환년수를 정수로 입력하세요(예. 5): ")) 09

10 # 대출금을 입력한다.

11 loanAmount = eval(input("대출금을 입력하세요(예. 120000950): ")) 12

13 # 총상환금을 계산한다.

14 monthlyPayment = loanAmount * monthlyInterestRate / (1 15 - 1 / (1 + monthlyInterestRate) ** (numberOfYears * 12)) 16 totalPayment = monthlyPayment * numberOfYears * 12 17

18 # 결과를 출력한다.

19 print("월상환금은", int(monthlyPayment * 100) / 100, "입니다.") 20 print("총상환금은", int(totalPayment * 100) / 100, "입니다.")

코드 2.8 대출 상환금을 계산하는 프로그램 ComputeLone.py

(38)

• 이 프로그램은 두 점 사이의
 거리를 계산하고 출력한다.

사례 연구: 거리 계산하기

01 # 2개의 실수 값을 갖는 첫 번째 점을 입력한다.

02 x1, y1 = eval(input("첫 번째 점에 대한 x1과 y1을 입력하세요: ")) 03

04 # 2개의 실수 값을 갖는 두 번째 점을 입력한다.

05 x2, y2 = eval(input("두 번째 점에 대한 x2와 y2를 입력하세요: ")) 06

07 # 거리를 계산한다.

08 distance = ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)) ** 0.5 09

10 print("두 점 사이의 거리는", distance, "입니다.")

코드 2.9 두 점을 입력 받아 이들 사이의 거리를 계산하는 프로그램

ComputeDistance.py

(39)

• 두 점 사이의 거리를 계산하고
 출력한다.

사례연구: 거리 계산하기 GUI

01 import turtle 02

03 # 사용자로부터 두 점을 입력받는다.

04 x1, y1 = eval(input("첫 번째 점에 대한 x1과 y1을 입력하세요: ")) 05 x2, y2 = eval(input("두 번째 점에 대한 x2와 y2를 입력하세요: ")) 06

07 # 거리를 계산한다.

08 distance = ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 09

10 # 두 점을 연결하는 직선을 그린다.

11 turtle.penup()

12 turtle.goto(x1, y1) # (x1, y1)로 이동한다.

13 turtle.pendown() 14 turtle.write("점 1")

15 turtle.goto(x2, y2) # (x2, y2)까지 직선을 그린다.

16 turtle.write("점 2") 17

18 # 직선 중앙으로 이동한다.

19 turtle.penup()

20 turtle.goto((x1 + x2) / 2, (y1 + y2) / 2) 21 turtle.write(distance)

22

코드 2.10 코드2.9를 turtle 그래픽으로 나타내는 프로그램 ComputeDistance.py

(40)

2.1 ComputeArea.py

2.2 ComputeAreaCircumWithConsoleInput.py

2.3 ComputeAreaWithConsoleInput.py

2.4 ComputeAverageWithSimultaneousAssignment.py

2.5 DisplayTime.py

2.6 SalesTax.py

2.7 ShowCurrentTime.py

2.8 ComputeLoan.py

2.9 ComputeDistance.py

2.10 ComputeDistanceGraphics.py

# -*- coding: utf-8 -*-

# -*- coding: cp949 -*-

# -*- coding: euc-kr -*-

Mac OS Windows

책과 강의노트에 나오는 소스에는 인코딩에 관한 내용은 생략되어 있습니다.

한글인코딩 설정을 위해서는 다음과 같은 주석을 달아 사용합니다.

2장의 학습에 필요한 소스 파일 목록은 다음과 같습니다.

참고사항

윈도 7이상 & pyCharm에서는 별도의 인코딛을 명시해 주지 않아도 됨

다음은 인코딩 문제가 발생하는 경우에 적용 가능한 인코딩의 예

(41)

다음과 같이 프로젝트 아래에 python 파일을 생성하도록 합니다

(42)
(43)

ISBN 978-89-7050-850-4 978-0-13-274718-9

감사합니다.

참조

관련 문서

• 파이썬은 연산자와 동일한 결과를 산출하는 함수로서 특수 메소드의 정의를 허용한다.이 메소드들은 파이썬이 인식할 수 있도록 특별한

• 하향식 접근 방식은 위에서부터 아래로 구조 차트에 있는 함수 하나씩을 차례대로 구 현해 가는 방식이다. 간단하지만 불완전한 함수인 스텁(stub)을 사용하여 함수를

혁신적 융합 역량을 요구하며 특히 SW적으로 다양한 문제를 해결할 수 있는 SW융합인재 양성 필요.. 정부의 중장기

창의적 문제해결역량 주어진 상황과 문제를 창의적으로 해결할 수 있는 능력 지식 융합 역량 전공 지식을 새로운 분야와 융합하고 아우를 수 있는 능력. 도전

TOPCIT은 ICT전공자 및 ICT산업 취업 희망자가 실제 현장에서 직면할 수 있는 문제를 어떻게 총체적 역량을 발휘하여 해결할 수 있는지

게 르만족들의 선교를 위해 보다 쉽게 하나님께 접근할 수 있는 듯이 보 이게 하기 위해 전례를 유형화.. 이는 여러 기독론

ü 의인유추 : 생산하려는 물건에 자신을 융합해버리는 상태로 문제를 해결함.. 즉, 사물이 지닌 특성에서 쉽게 접근할 수 있는 피상적 유추로서 가장 낮은 단계의 유형. ü

• 사업부 수준의 전략을 실행하기 위한 각 기능별 부서의 구체적인 전략. • 기능별부서의 전략은 경영전략이라는 관점에서 봤을 때 사업부