Language/Python

[ Python ] 다각형 그리기 프로그램

곽수진 2021. 8. 30. 09:43
반응형
리스트에 저장된 색상을 하나씩 꺼내 거북이의 색상으로 설정하면서 속이 채워진 다각형을 랜덤한 위치에 랜덤한 크기로 그리는 프로그램을 작성해보자.

 

import turtle, random
t=turtle.Turtle()
t.shape("turtle")
s=turtle.Screen()

def draw_shape(t, c, length, sides, x, y):
    t.up()
    t.goto(x,y)
    t.down()
    t.fillcolor(c)
    angle = 360.0 / sides
    t.begin_fill()
    for dist in range(sides):
        t.forward(length)
        t.left(angle)
    t.end_fill()

for i in range(10):
    color=random.choice(['red', 'orange', 'yellow', 'green', 'blue', 'purple'])
    side_length = random.randint(10,100)
    sides = random.randint(3,10)
    x = random.randint(-200,200)
    y = random.randint(-200,200)
    draw_shape(t, color, side_length, sides, x, y)

 

결과값 출력 모습

 

▶️ draw_shape(t, c, length, sides, x, y) : 화면의 (x,y) 위치에 다각형을 그리는 함수 정의

 

 

 


 

 

리스트에 색상을 미리 저장하지 않고 r, g, b 값을 랜덤으로 선정해 그림을 그리도록 하려면?

 

import turtle, random
t=turtle.Turtle()
t.shape("turtle")
s=turtle.Screen()

def draw_shape(t, length, sides, x, y):
    global r,g,b
    r=random.random()
    g=random.random()
    b=random.random()
    t.pencolor((r,g,b))
    t.up()
    t.goto(x,y)
    t.down()
    t.fillcolor((r,g,b))
    angle = 360.0 / sides
    t.begin_fill()
    for dist in range(sides):
        t.forward(length)
        t.left(angle)
    t.end_fill()

r, g, b = 0.0, 0.0, 0.0

for i in range(10):
    side_length = random.randint(10,100)
    sides = random.randint(3,10)
    x = random.randint(-200,200)
    y = random.randint(-200,200)
    draw_shape(t, side_length, sides, x, y)

 

결과값 출력 프로그램

 

▶️ global r, g, b : r,g,b 색상을 사용하기 위한 전역 함수

▶️ 랜덤값을 각각 r, g, b 값에 지정

r = random.random()
g = random.random()
b = random.random()

▶️ r,g,b = 0.0, 0.0, 0.0 : r, g, b 초기 값을 각각 0.0으로 설정함

→ 검은 색상으로 설정

 

 


 

 

x, y 좌표가 -200~200 사이에서 50~100 사이의 크기를 가지는 랜덤으로 삼각형, 사각형, 오각형, 육각형 원을 그리는 프로그램을 작성해보자.

그림의 개수는 최소 10개, 최대 20개로 사용자에게 입력을 받으며, 잘못 입력한 경우 올바른 값이 입력될 때까지 반복해서 입력받음

 

import random, turtle
t=turtle.Turtle()
t.shape("turtle")

def poly_num():
    msg = ""
    while True:
        num = int(turtle.textinput("", msg+"다각형 개수를 입력하세요.: "))
        if 10 <= num <= 20:
            break
        else:
            msg="10~20 사이의 수를 입력하세요.\n"
    return num

def poly_size():
    size=random.randint(50, 100)
    return size

def random_position():
    x = random.randint(-200, 200)
    y = random.randint(-200, 200)
    t.up()
    t.goto(x,y)
    t.down()

def draw_polygon(size):
    p=[3, 4, 5, 6, 9]
    s= random.choice(p)
    if s == 9:
        t.circle(size)
    else:
        t.circle(size, steps=s)

for i in range(poly_num()):
    s=poly_size()
    random_position()
    draw_polygon(s)

▶️ 사용자 정의 함수(poly_num())을 만들어 사용자에게 다각형의 개수를 입력받을 때, 그 값이 10 이상 20 이하면 다음 함수로 이동하지만 이에 해당되지 않을 겨우 10~20 사이의 수를 입력하도록 다시 안내

def poly_num():
    msg = ""
    while True:
        num = int(turtle.textinput("", msg+"다각형 개수를 입력하세요.: "))
        if 10 <= num <= 20:
            break
        else:
            msg="10~20 사이의 수를 입력하세요.\n"
    return num

 

▶️ size=random.randint(50, 100) : 다각형의 크기는 50~100 사이의 랜덤값으로 정함

▶️ x와 y 좌표값을 -200부터 200사이로 정해 그 사이에서 그림을 그리도록 함

def random_position():
    x = random.randint(-200, 200)
    y = random.randint(-200, 200)
    t.up()
    t.goto(x,y)
    t.down()

 

▶️ 다각형을 그리도록 함수를 정의할 때, 리스트에 저장된 값중 9가 랜덤으로 선택되면 원을 그리도록 함

▶️ steps : 원 반경내에 step값 만큼의 다각형을 그림

steps=s : s에 뽑힌 수(p 리스트에 존재하는 수들 중 랜덤으로 뽑힘)만큼 깎은 다각형을 그림

→ 역삼각형 그릴 때 활용 가능

def draw_polygon(size):
    p=[3, 4, 5, 6, 9]
    s= random.choice(p)
    if s == 9:
        t.circle(size)
    else:
        t.circle(size, steps=s)

 

사용자가 값을 입력하는 모습

 

결과값 출력 모습

반응형