본문 바로가기
프로그램

[파이썬] 문제 : 터틀 여러가지 동형의 개수, 크기 입력 받아 그리기

by 오디세이99 2022. 12. 5.
728x90
반응형

(문제)

여러가지 도형을 그리는 프로그램을 만드는거예요

도형 선택 메뉴를 함수로 작성하고, 각 도형을 그리는 함수를 작성해요 (원, 선, 사각형, 별, 하트 등 5가지 이상) 그리고 도형의 크기와 개수는 입력받고 위치는 램덤으로 그리는 프로그램

 

(방법)

import turtle as t
import math
import random

def circle(n):            # 원 그리기
    radius = n
    circum = 2 * math.pi * radius           # math package에 있는 pi 사용
    area = math.pi * radius * radius
    t.circle(radius)
    
def line(n):               # 라인 그리기
    t.forward(n)
    
def square(n):              # 사각형
    length = n
    for i in range(4):     # 4번 반복. 각형만큼 반복
        t.forward(length)   # 한변의 길이만큼 그리기
        t.right(360 / 4)    # 360을 4으로 나누어서 외각을 구함

def star(n):                # 별 그리기
    for i in range(5):
        t.forward(n)
        t.left(144)
        
def heart(n):               # 하트 그리기
    t.seth(0)
    t.left(45)
    t.forward(n)
    t.circle(n/2, 180)
    t.right(90)
    t.circle(n/2,180)
    t.forward(n)
        
menu = ['원', '선', '사각형', '별', '하트']       # 도형 종류를 리스트로 만듬
func = [circle, line, square, star, heart]        # 도형 종류에 따른 함수를 리스트로 만듬(인덱스가 도형명과 같음)

def selectMenu():                                 # 메뉴 선택 함수
    menu_str = ''                                 # 리스트의 도형명을 문자열로 만듬.. input에 보여주기 위함
    for i, v in enumerate(menu):
        menu_str += str(i+1) + ". " + v
        if i < len(menu)-1:
            menu_str += ', '
    no = input(f"메뉴를 선택하세요.({menu_str}, Q) : ")    # 도형명 입력 받기
    return no

t.setup(width = 600, height = 600)                # 화면 크기 설정
t.speed(0)                                        # 빠르게 설정


while True:      
    no = selectMenu()
    if no.upper() =='Q' or no == 'ㅂ' or no == 'ㅃ':     # Q면 종료
        break
    else:
        no = int(no)
    cnt = int(input('도형의 개수 : '))                     # 도형 개수 입력 받기
    if cnt > 10:                                           # 10개 이상 안되도록 함
        cnt = 10
    d = int(input('도형의 크기(원은 반지름, 그 외는 한 변의 길이) : '))

    for i in range(cnt):                  # 도형의 개수 만큼 반복
        t.up()                             # 첫 위치에서 클릭한 위치까지 이동하기 위해 선이 그려지지 않도록 펜을 UP
        x = random.randint(-300, 300)      # x 위치. 임의로 지정
        y = random.randint(-300, 300)      # y 위치. 임의로 지정
        t.goto(x, y)                       # 클릭한 위치로 이동
        t.down()                           # 이동 후 라인을 그리기 위해 펜down
        func[no-1](d)                      # func 리스트에 있는 함수를 인덱스로 실행. 크기를 인수로 줌

t.done()

 

728x90
반응형

댓글