python_exercise_01_turtle을 사용해 눈꽃만들기(미완성)

루시Soo의 우와한 서재·2022년 9월 28일
0

Toy_Projects

목록 보기
1/2

프로젝트 목적
파이썬의 Turtle graphics를 이용해서 화면에 그림을 그려보자

Basic - 눈꽃 한 송이 그리기

전체코드 without 설명

import turtle
import random

pat = turtle.Turtle()
turtle.Screen().bgcolor('grey')
colors = ['cyan', 'purple', 'white', 'blue']

pat.penup()
pat.forward(90)
pat.left(45)
pat.pendown()

def branch():
    for i in range(3):
        for i in range(3):
            pat.forward(15)
            pat.backward(15)
            pat.right(45)
        pat.left(90)
        pat.backward(15)
        pat.left(45)
    pat.right(90)
    pat.forward(45)
    
for i in range(8):
    branch()
    pat.left(45)

전체코드 with 설명

import turtle
import random # 오른쪽 두 줄의 코드로 turtle과 random의 libereis를 불러 옴

pat = turtle.Turtle() # turtle을 편리하게 사용하기 위한 코드 / why-> turtle을 코드 안에서 사용하려면 항상 turtle.Tortle()의 형식을 항상 prefix로 매번 붙여줘야 한다. pat에 assign해 놓으면 수고를 줄여준다
turtle.screensize(canvwidth=500, canvheight=500, bg='grey')

# pat을 그릴 시작포인트 지정하는 코드
pat.penup() # 마치 펜을 공중에 들면 아무것도 drawing할 수 없는 상태가 되는 것과 같은 효과 / drawing의 start point를 변경하고 싶거나 점선 drawing과 같은 효과를 낼 때 사용됨
pat.forward(90) # drawing cursor가 cursor의 angle방향으로 가로안 숫자만큼 앞으로 이동
pat.left(45) # 커서의 angle를 변경 / 새로운 이동방향을 지정해 줌
pat.pendown() # 캔버스에 drawing이 눈으로 확인가능하게 만들어주는 기능 / 이제 드로잉 확인이 가능

# 파이썬에서는 def 표시는 해당 코드블럭이 function이라는 의미 / 눈꽃의 잎사귀 하나를 그리는 코드를 function으로 묶어 두었다
def branch(): 
    for i in range(3):
        for i in range(3):
            pat.forward(15)
            pat.backward(15)
            pat.right(45)
        pat.left(90)
        pat.backward(15)
        pat.left(45)
    pat.right(90)
    pat.forward(45)

# 눈꽃 하나를 그리는 코드 / 눈꽃은 총 8개의 잎사귀로 구성됨
for i in range(8):
    branch()
    pat.left(45) # 잎사귀 하나를 그린 후 커서를 45도 방향으로 틀어줘야 다음 잎사귀가 처음 잎사귀랑 겹치지 않게 그려진다. 45도씩 각도를 틀어가면서 총 8개의 잎사귀가 그려지면 눈꽃 한송이 완성!



Intermediate - 눈꽃을 화면 안에 여러송이 그려보자~

전체코드 without 설명

import turtle
import random

pat = turtle.Turtle()
turtle.screensize(canvwidth=500, canvheight=500, bg='grey')
colors = ['cyan', 'purple', 'white', 'blue' ]
pat.penup()
pat.forward(90)
pat.left(45)
pat.pendown()

def branch():
    for i in range(3):
        for i in range(3):
            pat.forward(15)
            pat.backward(15)
            pat.right(45)
        pat.left(90)
        pat.backward(15)
        pat.left(45)
    pat.right(90)
    pat.forward(45)

for i in range(10):
    for i in range(8):
        branch()
        pat.left(45)
    pat.penup()
    pat.forward(random. randint(0,360))
    pat.right(random. randint(0,360))
    pat.pendown()
    pat.color(random.choice(colors))

전체코드 with 설명

import turtle
import random

pat = turtle.Turtle()
turtle.screensize(canvwidth=500, canvheight=500, bg='grey')
colors = ['cyan', 'purple', 'white', 'blue' ] #random libery를 이용해 눈꽃 색깔을 랜덤하게 설정하기 위한 list
pat.penup()
pat.forward(90)
pat.left(45)
pat.pendown()

def branch():
    for i in range(3):
        for i in range(3):
            pat.forward(15)
            pat.backward(15)
            pat.right(45)
        pat.left(90)
        pat.backward(15)
        pat.left(45)
    pat.right(90)
    pat.forward(45)

for i in range(10): # 눈꽃을 총 10개 그려준다
    for i in range(8):
        branch()
        pat.left(45)
    pat.penup() # 펜을 다시 non-drawing상태로 만듬
    pat.forward(random. randint(0,360)) #새로 그릴 눈꽃의 위치를 설정해주는 코는 여기서부터 아래로 두 줄 
    pat.right(random. randint(0,360)) 
    pat.pendown() # 새 눈꽃 그리기 시작점
    pat.color(random.choice(colors)) # 새 눈꽃에 리스트로부터 값을 받은 새로운 색깔 부여

😒현재 발생하는 에러

1) 눈꽃이 정해진 캔버스 밖에 그려지는 현상

2) 눈꽃 겹쳐서 그려지는 현상



Advanced -눈꽃의 컬러 뿐만 아니라 크기도 랜덤하게 다양하게 그려보자~

profile
그냥 끄적끄적 공부 정리 블로그

0개의 댓글