• 검색 결과가 없습니다.

12.1.

N/A
N/A
Protected

Academic year: 2022

Share "12.1."

Copied!
107
0
0

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

전체 글

(1)
(2)

12장. 그래픽 도구 활용 ­ turtle 클래스

12.1. 객체와 클래스

(3)

객체지향 언어의 목적

소프트웨어의 생산성 향상

!

컴퓨터 산업 발전에 따라 소프트웨어의 생명 주기(life cycle) 단축

!

객체 지향 언어는 상속, 다형성, 객체, 캡슐화 등 소프트웨어 재사용을 위한 여러 장 치 내장

소프트웨어의 재사용과 부분 수정을 통해 소프트웨어를 다시 만드는 부담을 대폭 줄임으로 써 소프트웨어의 생산성이 향상

실세계에 대한 쉬운 모델링

!

과거

수학 계산/통계 처리를 하는 등의 처리 과정, 계산 절차가 중요

!

현재

컴퓨터가 산업 전반에 활용

실세계에서 발생하는 일을 프로그래밍

실세계에서는 절차나 과정보다 일과 관련된 물체(객체)들의 상호 작용으로 묘사하는 것이 용이

!

실세계의 일을 보다 쉽게 프로그래밍하기 위한 객체 중심의 객체 지향 언어 탄생

3

(4)

소프트웨어 코드

4

(5)

Software size

5

(6)

number of lines?

교재의 한 페이지 30 라인 가량 교재 한 권

400 페이지라 할 때12,000 라인 가량 1200 만 라인이면?

1000 권 * 12,000라인 = 12,000,000

소프트웨어 설계에는 어마어마한 라인의 코딩이 필요하다 이중에서 오류가 있을 경우

Software Bug

6

(7)

Software Bug

프로그램 상에서 발생하는 문법 혹은 논리적인 오류를 말함

7

(8)

절차 지향 프로그래밍과 객체 지향 프로그래밍

절차 지향 프로그래밍

! 작업 순서를 표현하는 컴퓨터 명령 집합

! 함수들의 집합으로 프로그램 작성

8

(9)

절차 지향 프로그래밍과 객체 지향 프로그래밍

객체 지향 프로그래밍

!

프로그램을 실제 세상에 가깝게 모델링

!

컴퓨터가 수행하는 작업을 객체들간의 상호 작용으로 표현

!

클래스 혹은 객체들의 집합으로 프로그램 작성

커피 자판기 9

(10)

오브젝트란

10

(11)

캡슐화

! 메소드(함수)와 데이터를 클래스 내에 선언하고 구현

! 외부에서는 공개된 메소드의 인터페이스만 접근 가능

외부에서는 비공개 데이터에 직접 접근하거나 메소드의 구현 세부를 알 수 없음

! 객체 내 데이터에 대한 보안, 보호, 외부 접근 제한

객체 지향 언어의 특성 : 캡슐화

실세계의 캡슐화 11

(12)

객체 지향의 특성 : 상속

유전적 상속 관계 표현

!

나무는 식물의 속성과 생물의 속성을 모두 가짐

!

사람은 생물의 속성은 가지지만 식물의 속성은 가지고 있지 않음

12

(13)

클래스와 객체

클래스

!

객체의 속성과 행위 선언

!

객체의 설계도 혹은 틀

객체

!

클래스의 틀로 찍어낸 실체

메모리 공간을 갖는 구체적인 실체

클래스를 구체화한 객체를 인스턴스(instance)라고 부름

객체와 인스턴스는 같은 뜻으로 사용

사례

!

클래스: 소나타자동차, 객체: 출고된 실제 소나타 100대

!

클래스: 벽시계, 객체: 우리집 벽에 걸린 벽시계들

13

(14)

객체 (Object)

12.1. 객체와 클래스

▪ 파이썬은 객체를 기반으로 구성되어 있다.

▪ 객체에 대해 이해하고 활용하면, 문제를 더 쉽게 해결할 수 있다.

▪ 객체(Object), 클래스(Class), 메소드(Method), 속성(Attribute) 이라는 용어에 대해 알아보자

(15)

객체와 클래스의 이해

12.1. 객체와 클래스

▪ 클래스는 타입(Type)이고 객체는 변수

• 객체는 클래스로부터 생성

• 모든 객체는 그 객체를 정의하는 클래스의 구조를 가짐

▪ 클래스는 실체가 없는 개념이고 객체는 클래스의 구조를 갖는 실체

• 모든 객체는 다른 객체와 구분할 수 있는 ID(Identification)가 있음

• 사람 클래스의 객체는 이름과 주민 등록 번호가 있음

• 자동차 클래스의 객체에는 차량 번호가 있음

(16)

클래스와 객체와의 관계

16

붕어빵 틀은 클래스이며, 이 틀의 형태로 구워진 붕어빵은 바 로 객체입니다. 붕어빵은 틀의 모양대로 만들어지지만 서로

조금씩 다릅니다.

치즈붕어빵, 크림붕어빵, 앙코붕어빵 등이 있습니다. 그래도 이들은 모두 붕어빵입니다.

(17)

클래스와 객체-사례1

17

(18)

사람을 사례로 든 클래스와 객체 사례2

이름, 직업,나이, 성별, 혈액형 밥 먹기, 잠자기, 말하기, 걷기

클래스: 사람

이름 김미남 직업 교수 나이 47 성별 혈액형AB 이름 최승희

직업 의사 나이 45 성별 혈액형A

이름 이미녀 직업 골프선수 나이 28 성별 혈액형O 18

(19)

클래스의 수준 (1/2)

12.1. 객체와 클래스

▪ 사람의 범위

▪ 차의 범위

MAMMAL

PERSON ELEPHANT

STUDENT TEACHER

VEHICLE

PASSENGER CAR BUS

(20)

클래스의 수준 (2/2)

12.1. 객체와 클래스

▪ 도형의 범위

도형

삼각형 원

정삼각형 이등변 삼각형

사각형

(21)

클래스 구조

▪ 클래스를 내부적으로 살펴보면, 두 개의 구성 요소를 가짐 : 속성(자료구조)+메소드(함수)

▪ 클래스 구조의 예

속성(자료 구조)

중심 반지름

메소드(함수)

그리기 지우기

삼각형 속성(자료 구조)

좌표 변

메소드(함수)

그리기 지우기

12.1. 객체와 클래스

(22)

메소드 (method)

▪ 특정 클래스에 정의되어 있는 함수들을 메소드 라고 함

• 메소드 들의 정확한 용도를 파악하고 사용 하는 것이 중요

lower() swapcase()

upper() capitalize()

title() replace()

... str

append(item) insert(i, x)

copy() remove(item)

reverse() ... list

12.1. 객체와 클래스

(23)

객체의 메소드 활용

객체.method() 객체 이름 다음에 ‘.’을 적고 메소드 이름을 적는다.

str.lower() str.swapcase() str.upper() str.capitalize() str.title()

str.replace()

list.append(item) list.insert(i, x) list.copy()

list.remove(item) list.reverse()

12.1. 객체와 클래스

(24)

참고: 함수와 메소드 차이

▪ len()과 같은 함수를 사용할 때 사전작업 없이도 실행

• 내장함수

• int() , print(), min(), max() 등 약 70개

–이내장함수들도어느클래스의메소드

▪예) .random 클래스에서 1~7 사이의 정수형의 난수를 생성하는 메소드를 사용 시

• random.randint(1, 7)

12.1. 객체와 클래스

(25)

str class의 메소드 (1/4)

▪ 문자열도 str의 객체

• 입력한 greeting은 str class의 객체가 됨

– str class가 제공하는 method 사용 가능

▪ str 메소드 활용 예

>>> greeting = “How are you?”

str.lower() 문자열의 모든 문자를 소문자로 변환

>>> greeting.lower() 'how are you?'

>>>

str.upper() 문자열의 모든 문자를 대문자로 변환

>>> greeting.upper()

12.1. 객체와 클래스

(26)

str class의 메소드 (2/4)

12.1. 객체와 클래스

str.swapcase() 문자열의 대문자는 소문자로, 소문자는 대문자로 변환

>>> greeting.swapcase() 'hOW ARE YOU?'

>>>

str.capitalize() 문자열의 첫 글자만 대문자로 변환

>>> hello = ‘hello, python’

>>> hello.capitalize()

‘Hello. python'

>>>

str.title() 문자열에서 단어의 첫 문자들을 대문자로 변환

>>> greeting.title()

‘How Are You?'

>>>

(27)

str class의 메소드 (3/4)

12.1. 객체와 클래스

str.replace(old, new) 문자열의 부분 문자열인 old를 new로 변환

>>> greeting.replace(‘How’.’Where’)

‘Where are you?'

>>>

문자열에 해당하는 메소드를 적용하였을 때, str 자체가 변환되는 것이 아니라 복사본을 반환

>>> greeting = ‘How are you?'

>>> greeting.upper()

‘HOW ARE YOU?’

>>> greeting

‘How are You?’

▪ 주의

(28)

str class의 메소드 (4/4)

12.1. 객체와 클래스

메소드 설명

str.lower() 문자열의 대문자를 소문자로 변환한다.

str.swapcase() 문자열 중 대문자는 소문자로, 소문자는 대문자로 변화한다. s라는 문자열에 swapcase() 를 두번 적용하면 s 그대로 남아 있게 된다.

str.upper() 문자열의 소문자를 대문자로 변환한다.

str.capitalize() 문자열의 첫 글자만 대문자로 변환한다.

str.title() 문자열에서 각 단어의 첫 문자들을 대문자로 변환한다.

str.replace(old,new) 문자열의 부분 문자열인 old를 new로 바꾼 복사본을 반환한다.

(29)

[퀴즈 12-2]

12.1. 객체와 클래스

▪ 다음 프로그램을 완성해보자.

>>> favorite_song = 'Hotel California‘

(1) 문자열 favorite_song을 대문자로 바꿔서 출력하시오.

>>> song_title = ( )

>>> song_title HOTEL CALIFORNIA

(2) 문자열 favorite_song의 대문자는 소문자로, 소문자는 대문자로 바꿔서 출력하시오.

>>> song_title = ( )

>>> song_title hOTEL cALIFORNIA

(30)

[예제 12-1] (1/2)

12.1. 객체와 클래스

▪ 문제 해결 알고리즘

str = ‘an introduction python programming’

1) 위 문자열의 첫 글자만 대문자로 변환해보자.

2) 위 문자열의 단어의 첫 문자들을 대문자로 변환해보자.

1) 첫 글자만 대문자로 변환하는 메소드 → capitalize()

2) 각 단어의 첫 문자들 모두 대문자로 변환하는 메소드 → title()

(31)

[예제 12-1] (2/2)

12.1. 객체와 클래스

▪ 실행 결과

>>> str = ‘an introduction python programming’

>>> str.capitalize()

‘An introduction python programming‘

>>> str.title()

'An Introduction Python Programming'

// ‘프로그램’ 결과 와 동일

▪ 프로그램

(32)

list 객체

12.1. 객체와 클래스

▪ list도 list 객체

• list_number는 list클래스의 객체

– list class가 제공하는 메소드 사용 가능

▪ list의 원소 삽입

>>> list_number = [1,2,3,4,5]

list.insert(index,x) list의 i번째 index에 x를 추가

(33)

[예제 12-2] list의 원소 삽입

12.1. 객체와 클래스

▪ 프로그램

number=[2, 4, 8, 10] 일 때, list number의 알맞은 위치에 새로운 원소 6을 삽입 해보자.

>>> number = [2, 4, 8, 10]

>>> number.insert(2, 6)

>>> number

[2, 4, 6, 8, 10]

>>> number = [2, 4, 8, 10]

>>> number[2:2] = [6]

>>> number

[2, 4, 6, 8, 10]

#참고 : slice 방식으로 원소를 삽입할 수도 있다.

list_name[ index : index ] = [원소]

(34)

list의 원소 추가 : append

12.1. 객체와 클래스

▪ list의 마지막에 삽입하고 싶을 때는 insert를 사용할 수도 있지만 list의 길이를 모르는 경우 append라는 명령어를 통해 쉽게 추가 가능

list.append(item) list의 마지막에 item 추가

(35)

[예제 12-3] list의 원소 추가 : append

12.1. 객체와 클래스

▪ 프로그램

1) number=[2, 4, 6, 8] 일 때, list number의 알맞은 위치에 새로운 원소 10 을 추가해보자.

2) 알파벳 순으로 정렬된 list sorted=[“apple”, “blind”, “coin”]

일 때, 알맞은 위치에 새로운 원소 “zoo”를 추가해보자.

>>> number = [2, 4, 6, 8]

>>> number.append(10)

>>> number

[2, 4, 6, 8, 10]

>>> sorted = ['apple', 'blind', 'coin']

>>> sorted.append('zoo')

>>> sorted

['apple', 'blind', 'coin', 'zoo']

(36)

list의 원소 제거 : del

12.1. 객체와 클래스

▪ list에서 원소가 쓸모 없어졌을 경우 del을 통해 삭제 가능

• 삭제한 만큼 list의 길이 감소

del list[index] list에서 해당 index의 원소(element) 제거

del list[index1 : index2] list의 해당 [index1 : index2] 범위에 해당하는 
 원소(element) 제거

(37)

[예제 12-4] list의 원소 제거 : del

12.1. 객체와 클래스

number = [2, 4, 5, 6, 8, 10]일 때

number list를 짝수로만 이루어진 list로 만들어 보자 위의 결과물에서 가장 작은 수와 가장 큰 수로만 이루어진 list를 만들어 보자.

>>> number=[2, 4, 5, 6, 8, 10]

>>> del number[2]

>>> number

[2, 4, 6, 8, 10]

>>> del number[1:4]

>>> number [2, 10]

>>>

▪ 프로그램

(38)

list의 원소 제거 : empty list

12.1. 객체와 클래스

▪ empty list를 삽입하면 원소(element)의 삭제도 가능

list_name[index1 : index2] = [ ] list에서 [index1 : index2] 범위에 해당하는 
 원소(element)들을 제거

(39)

[예제 12-5] list의 원소 제거 : empty list

12.1. 객체와 클래스

spell = [‘i’, ‘n’, ‘c’, ‘i’, ‘d’, ‘e’, ‘n’, ‘t’]일 때, 3번과 4번 index의 원소를 empty list를 할당하여 제거를 해보자.

>>> spell=['i', 'n', 'c', 'i', 'd', 'e', 'n', 't']

>>> spell[2:4]=[]

>>> spell

['i', 'n', 'd', 'e', 'n', 't']

>>>

▪ 프로그램

(40)

[퀴즈 12-3]

12.1. 객체와 클래스

▪ 아래의 요구사항을 만족하도록 빈 칸에 알맞은 실행문을 채워 넣어 보자.

>>> ( )

>>> list_mix

['a', 'b', 4, 5, 'c']

>>> ( )

>>> list_mix ['a', 'b', 'c']

list에서 제공하는 메소드를 사용하여 아래와 같이 구성된 list에서 숫자를 제외한 string으로만 구성된 list가 되도록 만들어보자.

list_mix = [1,2,3,'a','b',4,5,'c']

(41)

list class의 메소드 (1/3)

12.1. 객체와 클래스

list.copy() list의 복사본 생성

>>> list_number.copy()

>>> list_copy [1, 2, 3, 4, 5]

list.remove(item) list에서 처음으로 나오는 item과 값이 동일한 원소(element) 제거

>>> list_number.remove(3)

>>> list_number [1, 2, 4, 5]

>>> list_a = [‘a’.’a’.’a’]

>>> list_a.remove(‘a’)

>>> list_a [‘a’.’a’]

(42)

list class의 메소드 (2/3)

12.1. 객체와 클래스

list.reverse() list의 원소(element)를 역순으로 정렬

>>> list_number.reverse()

>>> list_number [5, 4, 3, 2, 1]

(43)

list class의 메소드 (3/3)

12.1. 객체와 클래스

메소드 설명

list.append(item) list의 마지막에 item을 덧붙인다.

list.insert(i,x) list의 i번째 index에 x를 추가한다.

list.copy() list의 복사본을 만든다.

list.remove(item) list에서 처음으로 나오는 item과 동일한 원소를 제거한다.

list.reverse() list의 원소 순서를 역으로 바꾼다.

(44)

[예제 12-6] list class의 메소드 (1/2)

12.1. 객체와 클래스

(45)

[예제 12-6] list class의 메소드 (2/2)

12.1. 객체와 클래스

(46)

[예제 12-7] list class의 메소드 2 (1/2)

12.1. 객체와 클래스

(47)

[예제 12-7] list class의 메소드 2 (2/2)

12.1. 객체와 클래스

(48)

[퀴즈 12-4]

12.1. 객체와 클래스

▪ 아래의 빈칸에 알맞은 실행문을 채워 넣어 보자.

>>>favorite_list = ['Hotel California', 7, 'Tiger', True]

(1) 문자열 favorite_list의 순서를 거꾸로 바꿔서 출력하시오.

>>>( )

>>>favorite_list

[True, 'Tiger', 7, 'Hotel California']

(2) favorite_list와 구성은 동일하지만, 이름만 다른 list를 메소드를 이용하여 만들어보시오.

>>>another_name = ( )

>>>another_name

[True, 'Tiger', 7, 'Hotel California']

(49)

12장. 그래픽 도구 활용 ­ turtle 클래스

12.2. 유용한 클래스

(50)

import문

12.2. 유용한 클래스

▪ 파이썬에서는 사용자의 편의를 위해 많은 클래스들을 제공하고 있다.

▪ 파이썬이 제공한 클래스들을 활용하여 보다 빠르게 작업 할 수 있다.

▪ 파이썬이 제공하는 클래스

• 내장 클래스

– String , list ...

• 외부 클래스

– import문을 통해 불러들여야 함

import 클래스 명 ‘import 클래스 명’을 통해 파이선이 제공하는 클래스의 
 멤버와 메소드들을 사용할 수 있도록 한다.

---프로그램---

>>> import math # 수학관련 클래스

>>> import random # 무작위로 숫자를 생성하는 기능 관련 클래스

>>> import statistics # 통계관련 클래스

---

(51)

random class의 메소드

▪ 문제 해결 중에는 무작위로 숫자를 고르는 작업이 포함되는 경우

• random 클래스

▪ random number 생성을 위해서는 random 클래스를 import 해야한다.

---

>>> import random ---

random.random() 0~1 사이의 실수형 임의 값 생성

random.randint(a,b) a~b 사이의 정수형 임의 값 생성

random.choice(seq) list나 tuple형의 원소들 중 무작위(랜덤)로 추출

12.2. 유용한 클래스

(52)

random class의 메소드

random.random() 0~1사이의 실수형 임의 값 생성

>>> import random

>>> random.random() 0.8911847030609125

>>> random.random() 0.1745102303030438

>>> random.random() 0.8056931376625919

>>> random.random() 0.8063173451487526

>>>

12.2. 유용한 클래스

(53)

[예제 12-8] random class의 메소드 1 (1/2)

12.2. 유용한 클래스

● 문제 해결 알고리즘

(54)

[예제 12-8] random class의 메소드 1 (2/2)

12.2. 유용한 클래스

>>>

숫자입력:1 숫자입력:2 숫자입력:2 숫자입력:2 숫자입력:2 정답. 숫자는 5

>>>

테스트

(55)

random class의 메소드

random.randint(a, b) a~b 사이의 정수형 임의 값 생성

12.2. 유용한 클래스

(56)

[예제 12-9] random class의 메소드 2 (1/2)

12.2. 유용한 클래스

● 문제 해결 알고리즘

컴퓨터의 주사위 값 생성한다.

→ computer_dice = random.randint(1,7)

• 사용자의 주사위 값 생성한다.

→ user_dice = random.randint(1,7)

• 컴퓨터와 사용자의 주사위 값 비교하여 승부를 판정한다.

→ 조건문 사용

(57)

[예제 12-9] random class의 메소드 2 (2/2)

12.2. 유용한 클래스

import random

computer_dice = random.randint(1,7) user_dice = random.randint(1,7) if computer_dice > user_dice :

print('컴퓨터 :', computer_dice ,'사용자 :', user_dice,' 컴퓨터 승리') elif computer_dice< user_dice :

print('컴퓨터 :', computer_dice, '사용자 :', user_dice, '사용자 승리') else :

print('컴퓨터 :', computer_dice, '사용자 :', user_dice, '비김')

● 프로그램

● 테스트

>>>

컴퓨터 : 1 사용자 : 1 비김

컴퓨터 : 2 사용자 : 4 사용자 승리

>>>

(58)

random class의 메소드 3

▪ 주어진 list 안에서 임의로 값을 추출한다.

random.choice(list or tuple) list나 tuple형에서 랜덤 원소를 뽑아온다.

>>> import random

>>> game_select = ['가위','바위', '보']

>>> random.choice(game_select) '보'

>>> random.choice(game_select) '가위'

>>> random.choice(game_select) '보'

>>> random.choice(game_select) '바위'

>>> random.choice(game_select) '보’

12.2. 유용한 클래스

(59)

[퀴즈 12-5] 다음 빈 칸을 채워 보자.

- random.random() 함수를 사용하여 1부터 29까지의 수 중 하나의 수를 생성 ->( )(random.random() * ( ))

- random.randint() 함수를 사용하여 2부터 10까지의 수 중 하나의 짝수를 생성 ->random.randint( ) * ( )

- random.choice() 함수를 사용하여 1등부터 5등까지 추첨 ->random.choice( )

12.2. 유용한 클래스

(60)

12장. 그래픽 도구 활용 ­ turtle 클래스

12.3. turtle 클래스로 그림 그리기

(61)

turtle 이란?

12.3. turtle클래스로 그림 그리기

▪ turtle이란 앞서 배웠던 python이 제공하는 클래스 중 하나이다.

▪ 거북이의 모양을 가진 객체를 생성하여 선을 그려 디자인을 만들어 내는 것 이 가능한 시각적인 도구

▪ ‘import turtle’을 함으로써 turtle 모듈을 사용

(62)

turtle이 제공하는 메소드 (1/2)

▪ 위의 표와 같이 작성하면 다음과 같은 화면이 생성된다. 이 화살표를 이동시키면서 선을 그려 도 형을 만들 수 있다.

>>> import turtle


>>> turtlee = turtle.Turtle()

# turtle모듈을 import함으로써 turtle이 제공하는 메소드를 
 사용할 수 있다.

# 새로 만들어지는 turtle 객체의 이름은 ‘turtlee’로 지정한다.

12.3. turtle클래스로 그림 그리기

(63)

▪ turtle이 제공하는 메소드를 써보기 위해 다음과 같이 ‘turtlee’라는 객체를 선언한다.

▪ turtle에서는 turtle의 모양 및 크기, 색을 지정하고, turtle의 움직이는 방향이나 거리를 정하여 선 을 그리게 하는 등 여러 가지 메소드를 제공한다.

>>> turtlee = turtle.Turtle()

12.3. turtle클래스로 그림 그리기

turtle이 제공하는 메소드 (2/2)

(64)

turtle 객체의 모양 지정하기

▪ turtle의 모양은 여러 가지로 지정할 수 있다.

turtle의 객체.shape(‘shape이름‘) turtle의 모양을 지정한 모양으로 변경

종류) arrow, turtle, circle, square, triangle, classic

12.3. turtle클래스로 그림 그리기

(65)

turtle 객체의 색이나 크기 지정하기 (1/2)

▪ 색이나 크기도 지정하는 대로 다음과 같은 메소드를 통해 바꿀 수 있다.

Turtle의 객체.shapesize(w, h, b) turtle의 크기를 원하는 세로 w, 가로 h, 윤곽선 b배로 변경

12.3. turtle클래스로 그림 그리기

(66)

turtle 객체의 색이나 크기 지정하기 (2/2)

▪ 색이나 크기도 지정하는 대로 다음과 같은 메소드를 통해 바꿀 수 있다.

Turtle의 객체.fillcolor(‘색 이름’) Turtle의 색을 지정한 색으로 변경 종류) white, red, green, blue…

12.3. turtle클래스로 그림 그리기

(67)

[예제 12-10] turtlee의 모양 바꾸기 (1/2)

12.3. turtle클래스로 그림 그리기

(68)

[예제 12-10] turtlee의 모양 바꾸기 (2/2)

12.3. turtle클래스로 그림 그리기

(69)

앞뒤로 움직이기

12.3. turtle클래스로 그림 그리기

(70)
(71)

수행결과

(72)

[예제 12-11] turtle 이동시키기 (1/2)

12.3. turtle클래스로 그림 그리기

(73)

[예제 12-11] turtle 이동시키기 (2/2)

12.3. turtle클래스로 그림 그리기

(74)

각도 지정해서 움직이기

▪ 앞서 turtle이 앞, 뒤로 움직이는데 각도를 지정해주어 모든 방향을 자유자재로 움직이도록 할 수 있다.

▪ 각도를 지정하는 방식에는 여러 가지가 있는데, 이 중 대표적인 방법에는 2가지가 있다.

[예제]

turtle의 객체.setheading(각도) 원점을 기준으로 지정한 각도만큼 방향을 바꿈 turtle의 객체.left(각도) /

right(각도) 왼쪽 또는 오른쪽 방향으로 지정한 각도만큼 방향을 바꿈

12.3. turtle클래스로 그림 그리기

(75)

[예제]

12.3. turtle클래스로 그림 그리기

(76)

[주의] 객체의 방향

▪ 주의할 점은 객체의 방향을 정할 때 기준과 방향을 정확하게 알아야 한다는 것이다.

▪ setheading() 메소드를 사용하여 방향을 지정할 때는 turtle의 머리를 기준으로 
 왼쪽 방향으로 재어야 한다.

▪ left() 혹은 right() 메소드를 사용할 때는 turtle의 머리 기준으로 왼쪽인지 오른쪽인지 
 잘 보고 각도를 지정하면 된다.

12.3. turtle클래스로 그림 그리기

(77)

[예제 12-12] turtle 이동시키기 (1/2)

12.3. turtle클래스로 그림 그리기

(78)

[예제 12-12] turtle 이동시키기 (2/2)

12.3. turtle클래스로 그림 그리기

(79)

원 그리기

▪ 원의 반지름을 지정하여 메소드를 호출하면 그에 해당하는 원을 그릴 수 있다.

▪ circle()은 turtle을 이용하여 더 심화되고 복잡한 그래픽적인 이미지를 만들어 낼 때 많이 
 쓰이는 메소드이다.

[참고] 작업 도중 reset 하기

▪ turtle 객체를 이용하다 보면 객체의 위치를 원위치인 중간으로 가져오거나 화면을 다시 초기 
 상태로 만들어야 할 때가 생긴다.

▪ 또는 그림을 완성한 후 그림 본연의 모습을 보기 위해 객체를 숨기고자 하는 경우도 생기게 된다.

▪ 그럴 때 다음과 같은 메소드를 사용하여 진행한다.

turtle의 객체.circle


(반지름 길이) 원점을 기준으로 지정한 반지름 길이에 해당하는 원을 그림

turtle의 객체.hideturtle() turtle을 숨김

turtle의 객체.home() turtle을 초기 위치로 되돌림

12.3. turtle클래스로 그림 그리기

(80)

좌표로 움직이기

▪ 좌표 기준으로 지정하는 turtle 객체 이동 방법이 있다.

▪ 원래 turtle 클래스의 객체는 지정된 x, y 좌표 위에 나타나기 때문에 좌표를 활용하여 
 움직이면 된다.

[예제]

Turtle의 객체.setposition(x좌표, y좌표) Turtle의 위치를 지정한 좌표(x,y)로 바꿔줌 Turtle의 객체.position() Turtle의 현재 위치를 나타냄

12.3. turtle클래스로 그림 그리기

(81)

[예제 12-13] 정사각형 만들기 (1/2)

12.3. turtle클래스로 그림 그리기

(82)

[예제 12-13] 정사각형 만들기 (2/2)

12.3. turtle클래스로 그림 그리기

(83)

수행결과

(84)

수행결과

(85)

수행결과

(86)

펜 들고 내리기 (1/3)

▪ turtle이 이동할 때 선이 그어지는 것에 대하 여부를 결정하고 싶을 때는 다음과 같은 
 메소드를 사용하면 된다.

[예제]

turtle의 객체.penup() turtle의 pen이 놓여 짐. 이동할 때 선을 그리지 않음

12.3. turtle클래스로 그림 그리기

(87)

펜 들고 내리기 (2/3)

turtle의 객체.pendown() turtle의 pen이 들려짐. 이동할 때 선을 그림

12.3. turtle클래스로 그림 그리기

(88)

▪ turtle 객체를 이동시키기 전, 선을 그리는 혹은 그리지 않는 상태의 여부를 알고 싶다면 
 다음과 같은 메소드를 사용하여 확인한다.

펜 들고 내리기 (3/3)

turtle의 객체.isdown() turtle의 pen의 상태를 알려줌

펜이 놓여져 있으면 True, 놓여있지 않으면 False 반환

>>> turtlee.isdown() True

12.3. turtle클래스로 그림 그리기

(89)

[실습 12-1] penup & pendown 응용하여 심화된 그림 그리기

12.3. turtle클래스로 그림 그리기

(90)

[실습 12-1] penup & pendown 응용하여 심화된 그림 그리기

12.3. turtle클래스로 그림 그리기

(91)

[실습 12-2] 눈사람 그리기

12.3. turtle클래스로 그림 그리기

(92)

[실습 12-2] 눈사람 그리기

12.3. turtle클래스로 그림 그리기

(93)

조건문이나 반복문이 사용되는 이유

▪ 앞서 배운 메소드들을 사용하여 별 모양을 그렸을 때,

조건문이나 반복문이 없다면, (a)와 같이 프로그램을 짜게 된다.

하지만, 조건문이나 반복문이 들어간다면 (b)와 같은 짧은 프로그램으로 짤 수 있다.

12.3. turtle클래스로 그림 그리기

(94)

[예제 12-14] 정오각형 그리기 (1/2)

12.3. turtle클래스로 그림 그리기

(95)

[예제 12-14] 정오각형 그리기 (2/2)

12.3. turtle클래스로 그림 그리기

(96)

다른 클래스와 함께 turtle 사용하기

▪ turtle 또한 클래스이므로 앞 장에서 배웠던 다른 클래스들도 함께 사용이 가능하다.

▪ 예를 들어, random 클래스를 포함하여 turtle 객체의 이동 거리를 임의의 수를 주는 것이 
 가능하다.

▪ 위와 같은 아이디어로 다양한 프로그램을 작성하는 것이 가능하다.

▪ 참고로 다른 클래스를 포함하여 프로그램을 작성할 때는 파일로 작성하는 것이 더욱 
 효율적이다.

12.3. turtle클래스로 그림 그리기

(97)

[실습 12-3] 무작위로 움직이는 turtle

12.3. turtle클래스로 그림 그리기

(98)

[실습 12-3] 무작위로 움직이는 turtle

12.3. turtle클래스로 그림 그리기

(99)

[실습 12-4] 무작위로 움직이는 


여러 마리의 turtle

12.3. turtle클래스로 그림 그리기

(100)

[실습 12-4] 무작위로 움직이는 


여러 마리의 turtle

12.3. turtle클래스로 그림 그리기

(101)

참고: list를 이용하여 turtle 관리하기

▪ turtle의 객체를 여러 개 생성하는 경우, 한꺼번에 관리하기 위해 list를 사용하는 것이 
 효율적이다.

위의 [실습 12-4] 가 그 예이다.

▪ 예를 들어, 4개의 turtle 객체를 생성하여 list인 turtles에 넣는다고 가정했을 때 프로그램은 다음 과 같다.

12.3. turtle클래스로 그림 그리기

(102)

[실습 12-5] ‘two turtles’ race (1/2)

12.3. turtle클래스로 그림 그리기

(103)

[실습 12-5] ‘two turtles’ race (2/2)

12.3. turtle클래스로 그림 그리기

(104)

[연습문제]

1. 클래스는 ( )과 ( )로 이루어져 있다.

2. list나 str은 ( )이고 title(), upper(), copy()와 같은 ( )는 그에 포함된 속성 중 하나이다.

3. ( )는 list 클래스에서 제공하는 메소드이고, list의 마지막에 item을 덧붙이는 기능을 한다.

4. 다음 실행문의 잘못 된 부분을 찾으시오.

5. 다음과 같은 요구사항을 만족하도록 파이썬이 제공하는 클래스의 메소드를 활용하여 프로그램의 
 빈칸을 작성해보자.

>>> str1 = 'Hello‘

>>> str.upper()

[요구사항] - ‘PyThOn GuiDe'라 저장된 str1을 알맞은 영문 표기법인

’Python Guide'로 변환한다.

[프로그램]

>>> str1 = 'PyThOn GuiDe‘

>>> str1.( ) 'python guide‘

>>> str1.( ) 'Python Guide'

(105)

[연습문제]

6. 파이썬이 제공하는 외부 클래스들을 사용하기 위해서는 ( )문을 통해 불러 들여야만 사용이 가능하다.

7. 다음 요구사항에 맞추어 프로그램을 작성해보자.

(106)

[연습문제]

8. 다음 프로그램의 잘못된 부분을 찾고, 고쳐 보아라.

(107)

[연습문제]

9. 다음 요구사항에 맞추어 프로그램을 작성해보자.

참조

관련 문서

② Head rest 상하조절은 각도 조정 버튼을 누른 상태에서 head rest를 경사지게 하려면 각도조절 핸들을 먼저 누르고 있는 상태에서 head rest를 잡고 내리면 임의의 각도로

Label 객체 역시 버튼 객체와 같이 몇 가지 다른 종류의 생성 자 함수를 제공하고 있는데 Label 없이 생성하려는 경우 인 수 없는 Label() 생성자를 사용하고 처음부터

• Serializable 하지 않은 것은 저장되지 않는다..

기 존의 액션페인팅 작품에 있는 물감패턴을 뿌리기와 흘리기 기법으로 나누고 물감패턴의 길이와 두께를 측정하여 뿌리는 각도 , 붓의 높이, 붓에 가해지는 힘 ,

본 연구의 측정은 스마트폰 중독 수준에 따라 손목 각도를 측정했으며 중독 수준은 고위험군, 잠재적위험군, 일반사용군으로 구분했고, 손목은 굽힘 각도, 폄

문자열 name과 같은 이름을 가진 인수 값을 배열 형태로 가져 옴 checkbox, multiple list 등에

• 어떤 객체가 다른 객체에게 어떤 일을 수행하도록 명령하기 위해서 우리는 그 객체에 메시지를

 Class는 스스로 객체 생성 방법을 가지고 있어야 한다... 더 이상