Y. Daniel Liang 길준민 · 정재화
Chapter 3 수학함수, 문자열 및 객체
CONTENTS Ch3 수학 함수, 문자열 및 객체 3.1 들어가기 3.6 숫자 및 문자 서식 지정하기 3.1 들어가기 3.2 공통 파이썬 함수 3.3 문자열 및 문자 3.4 사례 연구: 최소 동전개수 계산하기 3.5 객체와 메소드의 개념 3.6 숫자 및 문자 서식 지정하기 3.7 다양한 도형 그리기 3.8 색 및 폰트 지정하기 네 도시에 둘려쌓인 지역의 넓이를 추정해야 한다고 가정해보자. 이 들 도시의 GPS 위치(위도와 경도)는 아래 그림과 같이 주어진다. 이 문제를 해결하기 위한 프로그램을 어떻게 작성할 것인가? 이 장을 완료하고 나면 이러한 프로그램을 작성할 수 있게 될 것이다. 학습하기에 앞서 서울 (35.2270869, -80.8431267) 대구 (32.0835407, -81.0998342) 제주 (28.5383355, -81.3792365) 광주 (33.7489954, -84.3879824)
학습목표 math 모듈에 포함된 함수를 사용하여 수학적 문제를 해결할 수 있다(3.2절) 문자열과 문자를 표현하고 처리할 수 있다(3.3~3.4절) ASCII와 유니코드를 사용하여 문자를 인코딩할 수 있다(3.3.1~3.3.2절) ord 함수를 사용하여 문자의 숫자 코드를 구하고 chr 함수로 숫자 코드를 문자 로 변환할 수 있다(3.3.3절) 이스케이프 시퀀스를 사용하여 특수 문자를 표현할 수 있다(3.3.4절). end 인자와 함께 print 함수를 호출할 수 있다(3.3.5절). str 함수를 사용하여 숫자를 문자열로 변환할 수 있다(3.3.6절). 문자열 연결에 + 연산자를 사용할 수 있다(3.3.7절). 키보드로부터 문자열을 읽을 수 있다(3.3.8절). 객체와 메소드의 개념을 설명할 수 있다(3.5절). format 함수를 사용하여 숫자와 문자열의 서식을 지정할 수 있다(3.6절). 다양한 도형을 그릴 수 있다(3.7절). 색상과 폰트를 사용하여 도형을 그릴 수 있다(3.8절).
내장함수와 수학 모듈 >>> max(2, 3, 4) # 최댓값을 반환한다 4 >>> min(2, 3, 4) # 최솟값을 반환한다 2 >>> round(3.51) # 가장 가까운 정수로 근사한다 >>> round(3.4) # 가장 가까운 정수로 근사한다 3 >>> abs(-3) # 절댓값을 반환한다 >>> pow(2, 3) # 2 ** 3 8
수학적 함수 실행 함수 설명 예 fabs(x) x의 절대값을 실수로 반환한다. fabs(-2) = 2.0 ceil(x) floor(x) x의 가장 가까운 정수로 버림하여 반환한다. floor(2.1) = 2 floor(-2.1) = -3 exp(x) x의 지수함수(ex) 값을 반환한다. exp(1) = 2.71828 log(x) x의 자연로그 값을 반환한다. log(2.71828) = 1.0 log(x, base) 특정 밑을 갖는 x이 로그 값을 반환한다. log(100, 10) = 2.0 sqrt(x) x의 제곱근을 반환한다. sqrt(4.0) = 2 sin(x) x의 사인 값을 반환한다. x는 라디안 각도로 표현된다. sin(3.14159 / 2) = 1 sin(3.14159) = 0 asin(x) 사인의 역함수에 대한 라디안 각도를 반환한다. asin(1.0) = 1.57 asin(0.5) = 0.523599 cos(x) x의 코사인 값을 반환한다. x는 라디안 각도로 표현된다. cos(3.14159 / 2) = 0 cos(3.14159) = -1 acos(x) 코인 역함수에 대한 라디안 각도를 반환한다. acos(1.0) = 0 acos(0.5) = 1.0472 tan(x) x의 탄젠트 값을 반환한다. x는 라디안 각도로 표현된다. tan(3.14159 / 4) = 1 tan(0.0) = 0 degrees(x) 라디안 각도 x를 도 단위로 변환한다. degrees(1.57) = 90 radians(x) 도 x를 라디안 각도 단위로 변환한다. radians(90) = 1.57 MathFunction 실행
사례연구: 내각 계산 예를 들어 삼각형의 세 변이 주어졌을 때, 다음의 공식을 사용하여 세 내각을 계산할 수 있다. 실행 예를 들어 삼각형의 세 변이 주어졌을 때, 다음의 공식을 사용하여 세 내각을 계산할 수 있다. PrintGradeFunction 실행
문자열 및 문자 문자열(1장에서 설명된)은 연속된 문자를 의미한다 값은 반드시 작은따옴표(‘ ‘)나 큰따옴표(“ “)의 쌍으로 둘러 쌓여진다 파이썬에 문자에 대한 데이터 타입을 지원하지 않는다 한 문자의 문자열이 곧 문자를 나타낸다 letter = 'A' # letter = "A" 와 같다 numChar = '4' # numChar = "4" 와 같다 message = "좋은 아침" # message = '좋은 아침'과 같다
노트 통일성을 위해, 이 책에서는 한 문자 이상의 문자열에 대해서는 큰따옴표를 사용하고 한 문자나 공백 문자열에 대해서는 작은따옴 표를 사용한다. 이러한 규칙은 다른 프로그래밍 언어에서도 일관되게 적용되므로 파이썬 프로그램을 다른 언어로 작성된 프로그램으로 변환하기가 수월해진다.
유니코드와 ASCⅡ 코드 파이썬은 16-비트 인코딩 체계인 유니코드(Unicode) 또한 지원한다. 유니코드는 전 세계 문자를 표현하기 위한 인코딩 체계이다. ASCⅡ는 유니코드의 작은 일부분이다. DisplayUnicode 실행
부록 B: ASCⅡ 문자 집합 1 ASCⅡ 문자 셋은 유니코드 \u0000부터 \u007f까지 대응되는 일부분이다.
부록 B: ASCⅡ 문자 집합 2
Ord 함수와 chr 함수 >>> ch = 'a' >>> ord(ch) 97 'b'
특수 문자를 위한 이스케이프 시퀀스 문자 이스케이프 시퀀스 이름 숫자 값 \b 백스페이스 8 \t 탭 9 \n 라인피드 10 \f 폼리드 12 \r 케리지 리턴 13 \\ 역슬래쉬 92 \’ 단일 인용부호 39 \’’ 이중 인용부호 34
줄바꿈 없이 출력하기 print(item, end = 'anyendingstring') print("AAA", end = ' ') print("BBB", end = '') print("CCC", end = '***') print("DDD", end = '***') 결과: AAA BBBCCC***DDD***
Str 함수 Str 함수는 숫자를 문자로 변환하는 데 사용된다. >>> s = str(3.4) # 실수를 문자열로 변환한다 >>> s '3.4' >>> s = str(3) # 정수를 문자열로 변환한다. '3' >>>
문자열 연결 연산자 두 숫자를 더하기 위해서 + 연산자를 사용한다. + 연산자는 두 문자열을 연결하는 데 사용될 수도 있다. 다음 예제를 살펴보자. >>> message = "파이썬에" + " 오신 것을" + " 환영합니다" >>> message '파이썬에 오신 것을 환영합니다' >>> chapterNo = 3 >>> s = str(chapterNo) + "장" >>> s '3장' >>>
콘솔로부터 문자열 읽기 콘솔로부터 문자열을 읽기 위해서는 input 함수를 사용한다. 예를 들어, 다음 코드는 세 문자열을 키보드로부터 읽는다 s1 = input("문자열을 입력하세요: ") s2 = input("문자열을 입력하세요: ") s3 = input("문자열을 입력하세요: ") print("s1은" + s1) print("s2는" + s2) print("s3은" + s3)
사례 연구: 최소 동전 개수 계산하기 프로그램은 전체 금액을 사용자가 원화로 입력하게 한 후, 실행 예와 같이 동일한 금액을 천 원, 오백 원, 백 원, 오십 원, 십 원 그리고 일 원 단위 화폐의 목록으로 출력한다 프로그램은 반드시 각 단위의 돈을 최대한 개수로 사용한다. 천 원, 오백 원, 백 원, 오십 원, 십 원과 일 원 순으로 최대한 갯수의 지폐(또 는 동전)를 사용한다 ComputeChange 실행
객체와 메소드의 개념 파이썬에서 숫자도 객체이고, 문자열도 객체이다. 즉 모든 데이터는 객체이다 객체는 개체이다. 파이썬에서 숫자도 객체이고, 문자열도 객체이다. 즉 모든 데이터는 객체이다 객체는 개체이다. 각 객체는 id와 type을 갖는다 같은 종류의 객체는 같은 타입을 갖는다. id 함수와 type 함수를 사용하여 객체에 대한 정보를 알아낼 수 있다
객체의 type과 ids id와 type 함수는 프로그램에서 거의 사용되지 않는다. 그러나 객체 를 이해하기 위한 매우 훌륭한 교육 도구이다. >>> n = 3 # n 은 정수 >>> id(n) 505408904 >>> type(n) <class 'int'> >>> f = 3.0 # f는 실수 >>> id(f) 26647120 >>> type(f) <class 'float'> >>> s = "환영합니다" # s is a string >>> id(s) 36201472 >>> type(s) <class 'str'>
OOP와 str객체 INT 3에 대한 객체 n=3 Id: 505408904 n Float 3.0에 대한 객체 f=3.0
객체 vs. 객체 레퍼런스 변수 n = 3 명령문은 n에 값 3을 할당한다. 그러나 실제로는 변수 n에 의해 참조되는 int 객체에 3을 할당하는 것이다.
메소드 객체에 대하여 여러 연산을 수행할 수 있다 이러한 연산은 함수를 사용하여 정의된다 객체에 대한 함수를 파이썬에서는 메소드(method)라고 한다 메소드는 오직 특정 객체로부터 호출될 수 있다. 예를 들면, 문자열 타입은 새로운 소문자와 대문자 문자열을 반환하 는 lower()와 upper()와 같은 메소드를 가지고 있다 다음은 이러한 메소드를 호출하는 방법에 대한 예제이다
str 객체 메소드 >>> s = "Welcome" >>> s1 = s.lower() # lower 메소드를 호출한다. >>> s1 ‘welcome' >>> s2 = s.upper() # upper 메소드를 호출한다. >>> s2 'WELCOME'
시작과 끝의 공백 문제 제거하기 또 다른 유용한 문자열 메소드는 strip()이다. >>> s = "\t 환영합니다. \n" >>> s1 = s.strip() # strip 메소드를 추천한다. >>> s1 '환영합니다.'
숫자와 문자열 서식화하기 때때로 특정 서식에 맞춰 숫자를 출력하는 것이 필요할 때가 있다. 예를 들면, 다음 코드는 주어진 대출금과 연이율을 사용하여 이자를 계산한다. Format 함수는 숫자 또는 문자열을 서식화한 문자열을 반환한다. format(item, format-specifier)
부동소수점 수 서식화하기 print(format(57.467657, '10.2f')) 서식 지정자 넓이 소수점 이하 자릿수 변환 코드
과학적 표기법 서식 지정하기 변환코드를 f에서 e로 변경하면, 숫자는 과학적 표기법으로 서식화된 다 예를 들면 print(format(57.467657, '10.2e')) print(format(0.0033923, '10.2e')) print(format(57.4, '10.2e')) print(format(57, '10.2e'))
백분율로 서식 지정하기 숫자를 백분율로 서식화하기 위해 변환 코드 %를 사용한다. 예를 들면, print(format(0.53457, '10.2%')) print(format(0.0033923, '10.2%')) print(format(7.4, '10.2%')) print(format(57, '10.2%')) 참고 : 1은 100%
서식 정렬하기 기본적으로 숫자의 서식은 오른쪽 정렬이다 서식 지정자에 < 기호를 삽입하여 지정된 너비 내에서 결과 서식 항 목을 왼쪽 정렬로 설정할 수 있다. 예를 들면, print(format(57.467657, '10.2f')) print(format(57.467657, '<10.2f'))
정수 서식 지정하기 정수에 변환 코드 d, x, o 및 b를 사용하여 10진수, 16진수, 8진수 또는 2진 수로 서식화할 수 있다 변환 시 너비 지정이 가능하다 print(format(59832, '10d')) print(format(59832, '<10d')) print(format(59832, '10x')) print(format(59832, '<10x'))
문자열 서식 지정하기 문자열을 특정 너비로 서식화하기 위해 변환 코드 s를 사용할 수 있 다. 예를 들면, print(format("파이썬에 오신 것을 환영합니다.", '20s')) print(format(" 파이썬에 오신 것을 환영합니다 ", '<20s')) print(format(" 파이썬에 오신 것을 환영합니다 ", '>20s')) 파이썬에 오신 것을 환영합니다. □□□ 파이썬에 오신 것을 환영합니다. 20
다양한 도형 그리기 파이썬의 turtle 모듈은 펜을 움직이고, 펜의 크기를 설정하고, 펜을 들 어올리고 내려놓기 위한 메소드를 포함한다. turtle은 turtle 모듈을 import할 때 생성된 객체이다.
Turtle의 펜 그리기 상태 메소드 메쏘드 명 설명 turtle.pendown() 펜을 내려놓는다 – 움직일 때 그려진다. turtle.penup() 펜을 들어올린다 – 움직일 때 그려지지 않는다. turtle.pensize() 선의 두께를 특정 너비로 설정한다.
Turtle의 이동 메소드 메쏘드 명 설명 turtle.forward(d) Turtle이 향하고 있는 방향으로 특정 거리 d만큼 앞으로 이동시킨다. turtle.backward(d) Turtle이 향하고 있는 반대 방향으로 특정 거리 d만큼 뒤로 이동시킨다. Turtle의 방향은 바뀌지 않는다. turtle.right(angle) Turtle을 특정 각 만큼 오른쪽으로 회전시킨다. turtle.left(angle) Turtle을 특정 각 만큼 왼쪽으로 회전시킨다. turtle.goto(x, y) Turtle을 절대 위치 (x, y)로 옮긴다. turtle.setx(x) Turtle의 x 좌표를 특정 위치로 옮긴다. turtle.sety(y) Turtle의 y 좌표를 특정 위치로 옮긴다. turtle.setheading(angle) 특정 각도로 Turtle의 방향을 설정한다. 0-동쪽, 90-북쪽, 180-서쪽, 270-남쪽. turtle.home() Turtle을 원점 (0, 0)으로 옮기고 동쪽 방향으로 설정한다. turtle.circle(r, ext, step) 특정 반지름 r, 경계 ext와 단계 step인 원을 그린다. turtle.dot(diameter, color) 특정 지름 diameter와 색상 color인 원을 그린다. turtle.undo() Turtle의 마지막 명령을 (반복적으로)되돌린다. turtle.speed(s) 1부터 10사이의 정수(10이 최대) s로 Turtle의 속도를 설정한다.
사례 연구: 간단한 도형 그리기 SimpleShapes 실행
색 및 폰트 지정하기 메쏘드명 설명 turtle.color(c) 펜 색상을 c로 설정한다. turtle.fillcolor(c) turtle.begin_fill() 도형을 채우기 전에 이 메소드를 호출한다. turtle.end_fill() begin_fill에 대한 마지막 호출 전까지 그려진 도형을 채운다. turtle.filling() 채우기 상태를 반환한다. 채우기 상태이면 True, 그렇지 않으면 False turtle.clear() 창을 깨끗하게 지운다. turtle의 상태와 위치를 영향을 받지 않는다. turtle.reset() 창을 깨끗하게 지우고 turtle의 상태와 위치를 원래 기본값으로 재설정한다. turtle.screensize(w, h) 캔버스의 높이 w와 높이 h를 설정한다. turtle.hideturtle() turtle을 보이지 않게 만든다. turtle.showturtle() turtle을 보이게 만든다. turtle.isvisible() turtle이 보이면 True를 반환한다. turtle.write(s, font=("Arial", 8, "normal")) 현재 turtle의 위치에 문자열 s를 쓴다. 폰트는 폰트명, 폰트크기, 폰트유형의 세 값으로 구성된다.
색상 및 채우기를 사용하여 그리기 turtle 객체는 색상과 폰트를 설정하는 메소드를 포함한다. ColorShapes 실행
감사합니다.