# data[].attributes.body
#삼각형과 사각형

import turtle as t

t.speed(1)

def triangle():

for x in range(3): #반복문 사용하기

t.forward(100)

t.right(120)

def square():

for x in range(4):

t.forward(100)

t.right(90)

triangle()

t.right(90)

square()

t.right(90)

triangle()

t.right(90)

square()

#복잡한 무늬 만들기

'''

import turtle as t

t.shape('turtle')

t.speed('fastest') # 거북이 속도를 가장 빠르게 설정

for i in range(300): # 300번 반복

t.forward(i) # i만큼 앞으로 이동. 반복할 때마다 선이 길어짐

t.right(91) # 오른쪽으로 91도 회전

'''

#별 만들기

'''

import turtle

t=turtle.Turtle() #커서 정의

t.screen.bgcolor('black') #배경색상

t.color('orange')# 커서 색상

t.shape('turtle')# 커서 모양

t.pensize(7) #펜 크기

t.pendown()

t.forward(200)

t.left(150)

t.forward(200)

t.left(150)

t.forward(200)

t.left(150)

t.forward(180)

t.left(130)

t.forward(180)

t.screen.exitonclick() #마우스 클릭 시 창 닫기

'''

# data[].attributes.attachment_caption
터틀을 활용해 분홍색 하트를 만들었다

# data[].attributes.body
import turtle

t = turtle.Turtle()

t. shape('turtle')

t. color('pink') #색을 분홍색으로 지정

t. begin_fill()

t. circle(100)

t. end_fill()

t. forward(70)

t. left (20)

t. begin_fill()

t. circle(100)

t. end_fill()

t. forward(70)

t. left (20)

t. begin_fill()

t. circle(100)

t. end_fill()

t. forward(70)

t. left (20)

t. begin_fill()

t. circle(100)

t. end_fill()

t. forward(70)

t. left (20)

t. begin_fill()

t. circle(100)

t. end_fill()

#원5개로 위쪽 모양 만들기

t. begin_fill()

t. right(190)

t. forward(180)

t. right(83)

t. forward(180)

t. end_fill()

#밑쪽 모양 만들기

turtle.exitonclick()

# data[].attributes.body
#그래프

import turtle

t=turtle.Turtle()

t.shape("turtle")

def f(x):

return x**2+2000

t.goto(200,0)

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

for x in range(150):

t.goto(x, int(0.01*f(x)))

#임포트 세팅

from turtle import *

import math

#입력

a=int(input("x^2의 계수를 입력하시오:"))

b=int(input("x의 계수를 입력하시오:"))

c=int(input("상수항을 입력하시오:"))

#판별식

d=b**2-4*a*c

if d>0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째 근:' , x1)

print('두번째 근:' , x2)

print('첫번째 근:' , '(',-b, "+",'√',d,"/",')',2*a)

print('두번째 근:' , '(',-b, "-",'√',d,"/",')',2*a)

if d==0:

x1=(-b)/2*a

print("중근:",x1)

if d<0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print('첫번째 근:' , x1r,"i")

print('두번째 근:' , x2r,"i")

print('첫번째 근:' , '(',-b, "+",'√',d,"/",')',2*a)

print('두번째 근:' , '(',-b, "-",'√',d,"/",')',2*a)

#타이틀

title("이차함수 그리기")

#y축

y=Turtle()

y.goto(0,-200)

y.goto(0,200)

y.setheading(90)

y.write("y")

#x

x=Turtle()

x.goto(-200,0)

x.goto(200,0)

x.write("x")

#원점

o=Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write("o")

#그래프

pen=Turtle()

pen.penup()

pen.goto(-50,0)

pen.pensize(1)

#초기 x값

xcor=-50

#그래프 그리기

while xcor<=50:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.goto(xcor, ycor)

pen.pendown()

xcor=xcor+0.5

소감문:#임포트 세팅 전의 코드는 함수 f(x)=x^2+2000을 그리는 프로그램으로 t.goto(200,0)~t.goto(0,0)의 코드는 1사분면의 x축과 y축을 그리고 f(x)함수에 0.01씩 곱한값의 정수값만큼 x축과 y축을 늘려가며 150번 반복하여 그림을 그리는데 함수의 값이 무척 커질수 있기에 0.01을 곱하여 움직인다. 함수f(x)=x^2+1을 그리는 프로그램에서 1을 2000으로 바꾸었다. 그리고 이차함수 x^2, x, 상수항의 값을 입력하여 입력된 이차함수를 그리는 프로그램인데 위 사진은 x^2의 계수를 1, x의 계수를 20, 상수항을 100으로한 이차함수의 그래프이다. 이 프로그램은 입력된 이차함수의 근을 알려주고 그래프를 그리는데 근을 구하는 방법은 if를 이용하여 d=b**2-4*a*c의 d가 0보다 큰지, 작은지, 0과 같은지를 이용하여 근을 구한다. 이후 그래프는 x,y축과 원점을 그린 후 그래프를 그리는데 마지막 코드가 프린트에서는 xcor+=0.5이렇게 나와 있는데 실행하였을때 이상한거 같아 xcor=xcor+0.5로 바꾸었다.

# data[].attributes.attachment_caption
x^2의 계수를 1 x의 계수를 4 상수항의 계수를 4로 입력하여 x=-2 중근을 가지는 그래프의 모습이다

# data[].attributes.body
#임포트

from turtle import *

import math

#입력

a=int(input('x^2의 계수를 입력하세요 : '))

b=int(input('x의 계수를 입력하세요 : '))

c=int(input('상수항을 입력하세요 : '))

#판별식

d=b**2-4*a*c

#판별식>0 _서로 다른 두 실근

if d>0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째 근 :',x1)

print('첫번째 근 :',x2)

print('첫번째 근 :',"(",-b,"+","√",d,'/',")",2*a)

print('첫번째 근 :',"(",-b,"-","√",d,'/',")",2*a)

#판별식=0일때

if d==0:

x1=(-b)/2*a

print('중근 :', x1)

#판별식<0일때

if d<0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print('첫번째 근 :', x1r, 'i')

print('두번째 근 :', x2r, 'i')

print('첫번째 근 :',"(",-b,"+","√",d,'i',")",'/',2*a)

print('첫번째 근 :',"(",-b,"-","√",d,'i',")",'/',2*a)

title('이차함수 그리기')

#y축

y=Turtle()

y.goto(0,-200)

y.goto(0,200)

y.setheading(90)

y.write('y')

#x축

x=Turtle()

x.goto(-200,0)

x.goto(200,0)

x.write('x')

#원점

o=Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write('0')

#그래프

pen= Turtle()

pen.penup()

pen.goto(-50,0)

pen.pensize(1)

#초기 x값

xcor = -50

#그래프 그리기

while xcor<=50:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.goto(xcor,ycor)

pen.pendown()

xcor =xcor+0.5

# data[].attributes.body
'''꼭짓점8개별

import turtle

t= turtle.Pen()

t.forward(100)

t.left(225)

t.forward(100)

t.left(225)

t.forward(100)

t.left(225)

t.forward(100)

t.left(225)

t.forward(100)

t.left(225)

t.forward(100)

t.left(225)

t.forward(100)

t.left(225)

t.forward(100)

t.left(225)

'''

'''색칠된 원

import turtle

t=turtle.Turtle()

t.shape('turtle')

radlus=int(input('원의 반지름을 입력하세요 : '))

color=input('원의 색깔을 입력하세요 : ')

t.color(color)

t.begin_fill()

t.circle(radlus)

t.end_fill()

turtle.exitonclick()

'''

''' 색이다른원3개

import turtle

t=turtle.Turtle()

t.color(0.6, 1,0.4)

t.begin_fill()

t.circle(30)

t.end_fill()

t.up()

t.forward(150)

t.down()

t.color(1, 0.3 ,1)

t.begin_fill()

t.circle(50)

t.end_fill()

t.up()

t.forward(150)

t.down()

t.color(0,1, 1)

t.begin_fill()

t.circle(70)

t.end_fill()

'''

''' 벌집

import turtle

t=turtle.Turtle()

def f():

t.forward(100)

t.left(60)

def h():

f(), f(), f(), f(), f()

def g():

h()

t.forward(100)

t.right(60)

g(), g(), g(), g(), g()

turtle.exitonclick()

'''

''' 스마일

import turtle

t=turtle.Turtle()

def drawCircle(color, raduls, x, y):

t.penup()

t.goto(x, y)

t.pendown()

t.color(color)

t.begin_fill()

t.circle(raduls)

t.end_fill()

drawCircle('brown', 100, 0, 0)

drawCircle('white', 30, -40, 100)

drawCircle('black', 15, -40, 100)

drawCircle('white', 30, 40, 100)

drawCircle('black', 15, 40, 100)

drawCircle('pink', 15, 0, 20)

t.hideturtle()

'''

'''ㅇ ㅣ 차함수

import turtle

t=turtle.Turtle()

t.shape("turtle")

def f(x):

return x**2+1

t.goto(200, 0)

t.goto(0, 0)c

t.goto(0, 200)

t.goto(0, 0)

for x in range(150):

t.goto(x, int(0.01*f(x)))

이번 파이썬 터틀 프로그램을 통해 다양한 도형을 그려보는 경험은 매우 즐거웠습니다. 프로그램에서는 8각 별, 색칠된 원, 색상이 다른 원 3개, 정육각형 벌집, 그리고 스마일 얼굴을 만들었습니다. 이 과정에서 프로그래밍을 직접 체험할 수 있었고, 각 도형이 주는 의미와 아름다움을 깨닫게 되었습니다.

처음으로 그린 8각 별은 기하학적 패턴의 매력을 느끼게 해주었습니다. 별의 각 꼭짓점을 그리면서 각도를 조절하고, 반복적인 과정을 통해 원하는 형태를 만들어가는 과정은 마치 퍼즐을 맞추는 듯한 재미가 있었습니다. 이 도형을 완성하며, 수학적 원리와 미적 감각이 어떻게 조화를 이루는지를 실감했습니다.

색칠된 원을 그리는 과정은 창의력을 발휘할 수 있는 좋은 기회였습니다. 하나의 원을 색칠하는 것부터 시작해, 서로 다른 색상의 원을 겹쳐 그리면서 다양한 조화를 만들어내는 것이 재미있었습니다. 정육각형 벌집을 그리면서는 자연에서 볼 수 있는 구조의 효율성을 느꼈습니다. 정육각형의 반복적인 배열은 마치 벌집의 형태를 떠올리게 하였고, 이 과정은 반복적인 도형을 활용하는 것의 중요성을 깨닫게 해주었습니다. 마지막으로 스마일 얼굴을 그리면서는 단순한 도형이 사람에게 긍정적인 감정을 어떻게 전달할 수 있는지를 경험했습니다. 눈과 입의 간단한 형태로도 기쁨을 표현할 수 있다는 점이 인상 깊었습니다. 이처럼 소소한 도형이지만, 감정과 연결될 수 있다는 사실은 코딩의 매력을 더욱 강조해 주었습니다.

전체적으로 이번 프로젝트는 창의력과 논리적 사고를 동시에 발전시키는 기회가 되었습니다. 터틀을 통해 다양한 도형을 그리면서 느낀 즐거움과 성취감은 앞으로도 계속해서 프로그래밍에 대한 흥미를 이어나가게 할 것 같습니다 . 다음에는 더 복잡한 도형이나 애니메이션을 시도해보고 싶다는 생각이 들었습니다. 이런 경험들이 쌓여, 더욱 창의적이고 도전적인 프로젝트에 도전할 수 있기를 바랍니다.

# data[].attributes.attachment_caption
터틀을 활용한 4가지 색의 선으로 이루어진 정사각형

# data[].attributes.body
import turtle

t=turtle.Turtle() # 커서 정의

t.screen.bgcolor('white') #배경 색상 지정

t.color('red') #커서 색상 지정

t.shape('turtle') #커서 모양 지정

t.pendown()

#펜으로 그리기

#정사각형 그리기 시작

t.forward(300)

t.left(90)

t.color('green') #커서 색상 바뀜

t.forward(300)

t.left(90)

t.color('blue') #커서 색상 바뀜

t.forward(300)

t.left(90)

t.color('yellow') #커서 색상 바뀜

t.forward(300)

t.left(90)

#마우스 클릭 시 창 닫기

t.screen.exitonclick()

#정사각형 그리기 종료

터틀 기본 사용하는 방법을 기본으로 정사각형을 그렸으며 각 선이 그려질 때마다 선의 색을 변경하여 4가지 색의 선으로 이루어진 정사각형을 그렸다.

커서의 색을 바꾸면 선의 색도 바뀌어서 선의 색을 모두 다른 색으로 바꾸고 싶었고 정사각형을 그려서 눈에 잘 보이게 하고 싶었다.

파이선을 사용하여 그림 판에 그림을 그림을 그리는 것처럼 할 수 있는 것이 신기해서 터틀을 활용하여 그림을 그리는 것을 선택하였다.

선을 그리는 수를 증가 시켰으며 커서의 색상이 바뀌는 것 또한 증가 시켰다.

# data[].attributes.body
from turtle import*

import math

a=int(input('x^2 계수 : '))

b=int(input('x 계수 : '))

c=int(input('상수항 : '))

d=b**2-4*a*c

if d>0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째 근', x1)

print('두번째 근', x2)

print('첫번째 근', '(', -b, '+', '√', d, '/', ')', 2*a)

print('두번째 근', '(', -b, '-', '√', d, '/', ')', 2*a)

if d==0:

x1=(-d)/2*a

print('중근 : ', x1)

if d<0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print('첫번째 근', x1r, 'i')

print('두번째 근', x2r, 'i')

print('첫번째 근', '(', -b, '+', '√', d, 'i', ')', '/', 2*a)

print('두번째 근', '(', -b, '-', '√', d, 'i', ')', '/', 2*a)

title("이차함수 그리기")

y = Turtle()

y.goto(0, -200)

y.goto(0, 200)

y.setheading(90)

y.write('y')

x = Turtle()

x.goto(-200, 0)

x.goto(200, 0)

x.write('x')

o = Turtle()

o.penup()

o.hideturtle()

o.goto(0, 0)

o.write('0')

pen = Turtle()

pen.penup()

pen.goto(-50, 0)

pen.pensize(1)

xcor=-50

while xcor<=50:

ycor = (a*(xcor**2))+(b*xcor)+c

pen.goto(xcor, ycor)

pen.pendown()

xcor+=0.5

사용자가 함수의 계수와 상수항을 입력하면 근의공식을 사용하여 그 값(d)가 0보다 크거나 0이거나 0보다 작은지를 구하고 그에 맞는 사용자가 입력한 함수의 근을 구한 이후 터틀로 먼저 기준이 되는 x축과 y축을 그리고 이를 표기한 후 그래프를 그려주는데 엄청 위쪽이나 아래쪽(x좌표부터) 그려주기 때문에 시간은 조금 걸리고 수가 너무 큰 경우 그려지고 있어도 화면의 밖에서 일어나기에 보이지 않는 경우도 있다.

비록 이 프로그램에서 내가 임의로 수정한 부분은 없지만, 2차 함수의 값을 입력받고 근을 구하는 방법을 해본 경험 자체가 재밌었고, 잠깐 배웠었던 터틀로 그래프를 그릴 수 있다는 것에 신기했다. 터틀에서 사용된 명령어는 모르는 게 많은데 후에 더 알아보고 싶다.

# data[].attributes.body
#많은 원 만들기

import turtle as t

n = 60 # 원을 60번 그림

t.fillcolor('black') #거북이 색깔

t.pencolor('blue') #선 색깔

t.shape('turtle') #모양

t.speed('fastest') # 거북이 속도를 가장 빠르게 설정

for i in range(n):

t.circle(120) # 반지름이 120인 원을 그림

t.right(360 / n) # 오른쪽으로 6도 회전

만든이유: 파이썬을 배우면서 내가 만들 수 있는 가장 많은 원을 좋아하는 색상으로 만들어 보고 싶어서 이번 기회로 만들게 되었다. 또한 이 원은 멀리서 보면 원이 많이 곂쳐져 있어서 꽃이 보이기도 해서 몽환적으로 보이기도 하는 것 같아서 코드를 만들면서 멋있다고 생각했던 것 같다. 1년동안 많이 어려웠지만 유익한 걸 많이 배워서 신기하고 재미있는 유익한 정보 시간을 보냈던 것 같다.

# data[].attributes.body
#tutle,math 불러오기

from turtle import *

import math

#입력

a=int(input('x^2의 계수를 입력하세요 : '))

b=int(input('x의 계수를 입력하세요 : '))

c=int(input('상수항을 입력하세요 : '))

#판별식

d=b**2-4*a*c

#판별식>0 일때

if d>0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째 근 :',x1)

print('두번째 근 :',x2)

print('첫번째 근 :',"(",-b,"+","√",d,'/',")",2*a)

print('두번째 근 :',"(",-b,"-","√",d,'/',")",2*a)

#판별식=0일때

if d==0:

x1=(-b)/2*a

print('중근 :', x1)

#판별식<0일때

if d<0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print('첫번째 근 :', x1r, 'i')

print('두번째 근 :', x2r, 'i')

print('첫번째 근 :',"(",-b,"+","√",d,'i',")",'/',2*a)

print('두번째 근 :',"(",-b,"-","√",d,'i',")",'/',2*a)

title('이차함수 그리기')

#y축 그리기

y=Turtle()

y.goto(0,-200)

y.goto(0,200)

y.setheading(90)

y.write('y')

#x축 그리기

x=Turtle()

x.goto(-200,0)

x.goto(200,0)

x.write('x')

#원점 그리기

o=Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write('0')

#그래프

pen= Turtle()

pen.penup()

pen.goto(-50,0)

pen.pensize(1)

#초기 x값

xcor = -30

#그래프 그리기

while xcor<=30:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.goto(xcor,ycor)

pen.pendown()

xcor +=0.5

이차함수의 이차항과 일차항의 계수, 상수항을 입력받고 판별식의 값에 따라 근의 공식을 이용해 근을 구한 후 함수를 그린다.

그래프 시작 부분을 -50으로 하면 그리는데 시간이 좀 걸려서 -30부터 시작하도록 바꾸었다.

코딩하면서 어딘가에서 계속 조금씩 안 써서 처음에 오류가 났다. 그래서 나는 실수한 부분을 찾아가며 오류를 고쳤는데 하다 보니 이것에 흥미를 느꼈다.

그래프가 축소되어있어 잘 표현되지 않아 보기 힘들다.

# data[].attributes.body
'''import turtle

t=turtle.Turtle()

t.shape("turtle")

def f(x):

return x**2+1

t.goto(200,0)

t.goto(0,0)

t.goto(0,200)

t,goto(0,0)

for x in range(150):

t.goto(x,int(0.01*f(x)))'''

#근 구하기

'''from turtle import *

import math

a= int( input ("x^2의 계수를 입력하세요. : "))

b= int( input ("x의 계수를 입력하세요. : "))

c= int( input ("상수항을 입력하세요. : "))

d=b**2-4*a*c

if d>0 :

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print("첫번째 근 :", x1)

print("두번째 근 :", x2)

print("첫번째 근 :", "(",-b,"+","√",d,"/",")",2*a)

print("두번째 근 :", "(",-b,"-","√",d,"/",")",2*a)'''

#변형(삼차방정식에서 세근의 합과 곱 구하기)

from turtle import *

import math

d= int( input ("x^3의 계수를 입력하세요. : "))

a= int( input ("x^2의 계수를 입력하세요. : "))

b= int( input ("x의 계수를 입력하세요. : "))

c= int( input ("상수항을 입력하세요. : "))

D=(a*a*b*b)-(4*d*b*b*b)-(4*a*a*a*c)-(27*d*d*c*c)+(18*d*a*b*c)

if D>0 :

print("세근의 합 :" , -a/d)

print("세근의 곱 :" , -c/d)

if D==0 :

print("중근을 가지고 있습니다.")

else:

print("허근을 가지고 있습니다.")

설명:처음에는 이차방정식에서 만약 판별식이 0보다 클때 두 근을 구하였고 여기서 만약 삼차방정식의 근의 합과 곱을 구할수는 없을까 라는 의문이 생겨서 약간의 변형을 주어 삼차 방정식의 근의 합과 곱을 구하는 프로그램을 제작하였다. 변형을 준 부분은 우선 판별식이 다르니까 삼차방정식의 판별식으로 변형하였고 IF절도 판별식이 0보다 클 때,작을 때,같을 때 로 3가지 경우의 수를 추가하였다.

# data[].attributes.body
#1번

'''

import turtle

t=turtle.Turtle()

t.shape('turtle')

def f(x):

return x**2+1

t.goto(200,0)

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

for x in range(150):

t.goto(x, int(0.01*f(x)))

'''

#2번

from turtle import *

import math

a=int(input('x^2의 계수를 입력하세요 : '))

b=int(input('x의 계수를 입력하세요 : '))

c=int(input('상수항을 입력하세요 : '))

d=b**2-4*a*c

if d > 0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째 근 :', x1)

print('두번째 근 :', x2)

print('첫번째 근 :', '(', -b, '+', '√', d, '/', ')', 2*a)

print('두번째 근 :', '(', -b, '-', '√', d, '/', ')', 2*a)

if d==0:

x1=(-b)/2*a

print('중근 :' , x1)

if d < 0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print('첫번째 근 :', x1r, 'i')

print('두번째 근 :', x2r, 'i')

print('첫번째 근 :', '(', -b, '+', '√', d, 'i', ')' , '/', 2*a)

print('두번째 근 :', '(', -b, '-', '√', d, 'i', ')' , '/', 2*a)

title('이차함수 그리기')

y=Turtle()

y.goto(0, -200)

y.goto(0, 200)

y.setheading(90)

y.write('y')

x=Turtle()

x.goto(-200, 0)

x.goto(200, 0)

x.write('x')

o=Turtle()

o.penup()

o.hideturtle()

o.goto(0, 0)

o.write('0')

pen=Turtle()

pen.penup()

pen.goto(-50, 0)

pen.pensize(1)

xcor=-50

while xcor<=50:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.goto(xcor, ycor)

pen.pendown()

xcor+=0.5

위 그림은 두 번째의 결과이고 값은 차례대로

x^2의 계수는 2, x의 계수는 10, 상수항은 5를 입력하여 함수의 근을 구하고 이 함수의 그래프를 그리는 프로그램을 완성했다.

함수 프로그램에 수를 입력했을 때 에러가 뜨고 그래프가 바로 그려지지 않아 문제점을 찾기위해 애를 썻는데 : 뒤에 반복문의 위치가 들쭉날쭉인 것을 보고 파이선 프로그램을 할 때각 문단이 속하는 반복문의 위치를 정확히 확인해야한다는 사실을 다시 한 번 느끼고 명심할 수 있었다.

수학인 근의 공식과 정보 프로그램이 합쳐져 함수 그래프를 일일이 구하지 않고도 그릴 수 있어 간편했고 이런 프로그램을 만들 수 있는 기회를 가질 수 있어 좋았다. 다음에는 2차함수뿐만 아니라 무리함수와 삼각함수 등 고2때 배우는 함수를 그리는 방법도 알아보고 이를 프로그램에 적용해보고 싶다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.shape("turtle")

def f(x):

return x**2+8

t.goto(200,0)

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

for x in range(150):

t.goto(x, int(0.01*f(x)))

#임포트

from turtle import *

import math

#입력

a=int(input("x^2의 계수를 입력하시오:"))

b=int(input("x의 계수를 입력하시오:"))

c=int(input("상수항을 입력하시오:"))

#판별식

d=b**2-4*a*c

if d>0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째 근:' , x1)

print('두번째 근:' , x2)

print('첫번째 근:' , '(',-b, "+",'√',d,"/",')',2*a)

print('두번째 근:' , '(',-b, "-",'√',d,"/",')',2*a)

if d==0:

x1=(-b)/2*a

print("중근:",x1)

if d<0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print('첫번째 근:' , x1r,"i")

print('두번째 근:' , x2r,"i")

print('첫번째 근:' , '(',-b, "+",'√',d,"/",')',2*a)

print('두번째 근:' , '(',-b, "-",'√',d,"/",')',2*a)

#이름

title("이차함수 그리기")

#y

y=Tuㄱtle()

y.goto(0,-200)

y.goto(0,200)

y.setheading(90)

y.write("y")

#x

x=Turtle()

x.goto(-200,0)

x.goto(200,0)

x.write("x")

#원점

o=Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write("o")

#그래프

pen=Turtle()

pen.penup()

pen.goto(-50,0)

pen.pensize(1)

#초기 x값

xcor=-50

#그래프 그리기

while xcor<=50:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.goto(xcor, ycor)

pen.pendown()

xcor=xcor+0.5

처음에는 2차함수의 그래프를 그리고 그다음엔 사용자에게 계수를 입력받아서 그 근을 구한뒤 그 근에 기반하여 그래프를 다시한번더 그려준다. 굉장히 어려워서 여기저기 물어보느라 힘들었고 어떻게 해야하는지 알아내기 굉장히 힘들었다.

# data[].attributes.body
#별 그리기

import turtle as t

n = 5

t.shape('turtle')

for i in range(n):

t.forward(100)

t.right((360 / n) * 2)

t.forward(100)

t.left(360 / n)

별을 그릴 때는 72도(360 / 5)를 회전합니다. 이때 별의 꼭지점은 72도를 한 번 더 회전해서 144도입니다. 따라서 t.forward(100)으로 선을 한 번 그리고 t.right((360 / n) * 2)으로 오른쪽으로 144도 회전한 뒤 t.forward(100)으로 선을 그립니다.

그리고 별의 꼭지점을 그린 뒤 다음 꼭지점을 그릴 때는 t.left(360 / n)으로 왼쪽으로 72도 회전합니다. 이렇게 5번 반복하면 별을 그릴 수 있습니다.

# data[].attributes.body
#그래프

import turtle

t=turtle.Turtle()

t.shape("turtle")

def f(x):

return x**2+1

t.goto(200,0)

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

for x in range(150):

t.goto(x, int(0.01*f(x)))

#임포트 세팅

from turtle import *

import math

#입력

a=int(input("x^2의 계수를 입력하시오:"))

b=int(input("x의 계수를 입력하시오:"))

c=int(input("상수항을 입력하시오:"))

#판별식

d=b**2-4*a*c

if d>0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째 근:' , x1)

print('두번째 근:' , x2)

print('첫번째 근:' , '(',-b, "+",'√',d,"/",')',2*a)

print('두번째 근:' , '(',-b, "-",'√',d,"/",')',2*a)

if d==0:

x1=(-b)/2*a

print("중근:",x1)

if d<0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print('첫번째 근:' , x1r,"i")

print('두번째 근:' , x2r,"i")

print('첫번째 근:' , '(',-b, "+",'√',d,"/",')',2*a)

print('두번째 근:' , '(',-b, "-",'√',d,"/",')',2*a)

#타이틀

title("이차함수 그리기")

#y축

y=Turtle()

y.goto(0,-200)

y.goto(0,200)

y.setheading(90)

y.write("y")

#x

x=Turtle()

x.goto(-200,0)

x.goto(200,0)

x.write("x")

#원점

o=Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write("o")

#그래프

pen=Turtle()

pen.penup()

pen.goto(-50,0)

pen.pensize(1)

#초기 x값

xcor=-50

#그래프 그리기

while xcor<=50:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.goto(xcor, ycor)

pen.pendown()

xcor=xcor+0.5

d=b**2-4*a*c으로 서로 다른 두 실근과 중근, 허근을 구했고xcor=-50으로 초기 x값을 설정했으며 while xcor<=50:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.pendown()

xcor+=0.5 으로 그래프를 그렸다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

def drawCircle(color,radius,x,y):

t.penup()

t.goto(x,y)

t.pendown()

t.color(color)

t.begin_fill()

t.circle(radius)

t.end_fill()

drawCircle("yellow",100,0,0) #얼굴

drawCircle("white",30,-40,0) #왼쪽 눈

drawCircle("black",15,-40,0) #왼쪽 눈동자

drawCircle("white",30,40,100) #오른쪽 눈

drawCircle("black",15,40,100) #오른쪽 눈동자

drawCircle("pink",17,45,25) #입

drawCircle("yellow",30,-20,-100) #오른손

drawCircle("yellow",30,40,-130) #왼손

t.color("green") #줄기

t.pensize(20)

t.right(30)

t.forward(50)

t.back(100)

t.color("pink") #꽃

t.pensize(50)

t.forward(1)

터틀에서 주로 사용하는 함수와 기본 조작법을 통해 꽃을 들고 있는 캐릭터를 그리는 프로그램을 만들었다. 처음에 함수를 정의하는 과정을 거침으로써 사람 캐릭터를 그릴 수 있었고, 그 후 펜 사이즈와 색상을 조절하고 상하좌우로 커서를 이동시켜 꽃을 그렸다.

# data[].attributes.body
#임포트

from turtle import *

import math

#입력

a=int(input('x^2의 계수를 입력하세요 : '))

b=int(input('x의 계수를 입력하세요 : '))

c=int(input('상수항을 입력하세요 : '))

#판별식

d=b**2-4*a*c

#판별식>0 _서로 다른 두 실근

if d>0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째 근 :',x1)

print('첫번째 근 :',x2)

print('첫번째 근 :',"(",-b,"+","√",d,'/',")",2*a)

print('첫번째 근 :',"(",-b,"-","√",d,'/',")",2*a)

#판별식=0일때

if d==0:

x1=(-b)/2*a

print('중근 :', x1)

#판별식<0일때

if d<0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print('첫번째 근 :', x1r, 'i')

print('두번째 근 :', x2r, 'i')

print('첫번째 근 :',"(",-b,"+","√",d,'i',")",'/',2*a)

print('첫번째 근 :',"(",-b,"-","√",d,'i',")",'/',2*a)

title('이차함수 그리기')

#y축

y=Turtle()

y.goto(0,-200)

y.goto(0,200)

y.setheading(90)

y.write('y')

#x축

x=Turtle()

x.goto(-200,0)

x.goto(200,0)

x.write('x')

#원점

o=Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write('0')

#그래프

pen= Turtle()

pen.penup()

pen.goto(-50,0)

pen.pensize(1)

#초기 x값

xcor = -50

#그래프 그리기

while xcor<=50:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.goto(xcor,ycor)

pen.pendown()

xcor =xcor+0.5

처음에 학습지를 받아서 바로 작성하였는데 잋함수가 오른쪽으로만 뻗고 있어서 반대쪽으로도 뻗게 하려고 근을 구한뒤 다시 그 근을 기반으로 반대쪽을 그려주는 것이 아주 힘들었다

# data[].attributes.body
#임포트 세팅

from turtle import *

import math

#입력

a=int(input("x**2의 계수를 입력하세요 : "))

b=int(input("x의 계수를 입력하세요 : "))

c=int(input("상수항을 입력하세요 : "))

#판별식

d=b**2 - 4*a*c

#판별식 > 0 -서로 다른 두 실근

if d>0:

x1=((-b + math.sqrt(d))/2*a)

x2=((-b - math.sqrt(d))/2*a)

print("첫번째 근 :", x1)

print("두번쨰 근 :",x2)

print("첫번째 근:", "(", -b, "+","v", d,"/",")",2*a)

print("두번째 근:", "(", -b, "-","v", d,"/",")","/",2*a)

#판별식 = 0 -중근

if d==0:

x1=(-b)/2*a

print("중근 :",x1)

#판별식 < 0 -허근

if d<0:

x1r=((-b+math.sqrt(-d))/2*a)

x2r=((-b-math.sqrt(-d))/2*a)

print("첫번째 근 :",x1r, "i")

print("두번째 근 :",x2r, "i")

print("첫번째 근:", "(", -b, "+","v", d,"i",")","/",2*a)

print("두번째 근:", "(", -b, "-","v", d,"i",")","/",2*a)

#y축

y=Turtle()

y.goto(0,-200)

y.goto(0,200)

y.setheading(90)

y.write("y")

#x축

x=Turtle()

x.goto(200,0)

x.goto(200,0)

x.write("x")

#원점

o=Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write("0")

#그래프

pen=Turtle()

pen.penup()

pen.goto(-50,0)

pen.pensize(1)

#초기 x값 설정

xcor=-50

#그래프 그리기

while xcor<=50:

ycor=(a*(xcor**2))+(b*xcor)+c

pen.goto(xcor,ycor)

pen.pendown()

xcor+=0.5

판별식으로 근을 알아내고 그근을 바탕으로 터틀을 이용해 그래프의 원점과 x축과 만나는 점들을 찾고 그래프를 그리는 프로그램이다.

터틀을 이용해 이차함수 그래프도 그릴 수 있다는 사실이 신기했다, 다음에는 삼차 함수나 로그함수같은 다른 함수들도 그려보고 싶다는 생각이 들었다.

터틀을 활용해 함수를 그리는 프로그램을 개발하면 여러 방면에서 유용하게 쓰일 수 있겠다는 생각이 들었다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.shape("turtle")

t.speed(100)

def f(x):

return x**2+1

t.goto(200,0)

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

t.goto(-200,0)

t.goto(0,0)

t.goto(0,-200)

t.goto(0,0)

for x in range(150):

t.goto(x, int(0.01*f(x)))

def f(x):

return x**2-1

for x in range(150):

t.goto(x, int(0.01*f(x)))

def f(x):

return -x**2-1

for x in range(150):

t.goto(x, int(0.01*f(x)))

def f(x):

return x**2-1

for x in range(150):

t.goto(x, int(0.01*f(x)))

빠른 속도로 x축과 y축을 그린 후에 무리함수를 그리고 직선을 그린 후에 대침이동하여 똑같이 그린다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.shape('turtle')

r= int(input('원의 반지름을 입력하세요 : ' ))

color=input('원의 색깔을 입력하세요 : ' )

t.color(color)

t.begin_fill() #도형 색칠 시작

t.circle(r)

t.end_fill() #도형 색칠 종료

turtle.exitonclick()

이 코드를 작성하면서 가장 크게 느낀 점은, 사용자 입력을 받아서 원을 그리는 과정이 생각보다 직관적이고 재미있었고 input()을 통해 반지름과 색깔을 입력받고 난 뒤 그것을 바탕으로 원을 그리니까 코드가 바로 눈에 보이는 결과로 나타나는 점이 매우 흥미로웠다. 또한, turtle circle()을 사용해 원을 그리는 과정이 간단하지만 기하학적 도형을 다루는 기본 개념을 익히기에 좋았다.

코드의 흐름을 따라가며, 색깔을 먼저 설정하고 그 후에 원을 그린다는 논리적 순서의 중요성도 새삼 느꼈다. 그리고 처음에는 코드가 제대로 작동하지 않아 디버깅을 하게 되었는데, 오류를 하나씩 고쳐가며 문제를 해결하는 과정이 매우 중요하다는 걸 다시 한 번 깨달았다.

전체적으로 이 코드는 프로그래밍의 기초를 배우는 데 매우 유익했고, 결과를 바로 확인할 수 있어서 더욱 재미있었다.

# data[].attributes.body
신호등 만들기

import turtle

t=turtle.Turtle()

def f_circle(r,b,radius) :

t.color(r,b)

t.begin_fill()

t.circle(radius)

t.end_fill()

#1 # 첫 번 째 색깔

f_circle("black", "skyblue", 30)

#2

t.up()

t.forward(-100)

t.down()

#3

f_circle("black","fuchsia", 30)

#4

t.up()

t.forward(200)

t.down()

#5

f_circle("black","khaki", 30)

#다시1

t.up()

t.forward(-200)

t.down()

#1 # 두 번 째 색깔

f_circle("red","red",30)

#2

t.up()

t.forward(100)

t.down()

#3

f_circle("yellow","yellow",30)

#4

t.up()

t.forward(100)

t.down()

#5

f_circle("green","green",30)

#다시2

#1 # 마지막

f_circle("white","white",30)

#2

t.up()

t.forward(-100)

t.down()

#3

f_circle("white","white",30)

#4

t.up()

t.forward(-100)

t.down()

#5

f_circle("white","white",30)

터틀을 이용하여 원을 그리고 색칠하는 프로그램이다. 이를 이용하여 세 가지의 각기 다른 색의 반지름이 같은 원을 그리고 다시 앞에서 부터 색을 채워 신호등을 연상시켰다. 마지막엔 모두 흰 색으로 칠해 없어진 것처럼 보이게 하였다.

이동하는 좌표값을 다르게하여 시작할 땐 가운데부터, 신호등은 처음부터, 사라질 땐 마지막부터 순서가 진행되도록 신경썼다.

# data[].attributes.body
#임폴트세팅

from turtle import *

import math

#입력

a=int(input("x^2의 계수 입력 : "))

b=int(input("x의 계수 입력 : "))

c=int(input("상수항의 계수 입력 : "))

#판별식

d= b**2 - 4*a*c

#D>0 - 서로 다른 두 실근

if d > 0:

x1=((-b+math.sqrt(d))/2*a)

x2=((-b-math.sqrt(d))/2*a)

print('첫번째근 :', x1)

print('두번째근 :', x2)

print('첫번째근 :', '(', -b, '+', '√', d, 'i',')', 2*a)

print('첫번째근 :', '(', -b, '-', '√', d, 'i',')', 2*a)

#D=0 중근

if d==0:

x1=(-b)/2*a

print('중근 : ', x1)

#D<0 허근

if d < 0:

x1r= ((-b + math.sqrt(-d))/2*a)

x2r = ((-b - math.sqrt(-d))/2*a)

print('첫번째근 :', x1r, 'i')

print('두번째근 :', x2r, 'i')

print('첫번째근 :', '(', -b, '+', '√', d, 'i',')', '/', 2*a)

print('첫번째근 :', '(', -b, '-', '√', d, 'i',')', '/' , 2*a)

#타이틀

title("이차함수 그리기")

#Y축

y= Turtle()

y.goto(0,-200)

y.goto(0,200)

y.setheading(90)

y.write('y')

#X축

x = Turtle()

x.goto(-200,0)

x.goto(200,0)

x.write('x')

#원점

o = Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write('o')

#그래프

pen = Turtle()

pen.penup()

pen.goto(-50,0)

pen.pensize(1)

#초기 x값 설정

xcor = -50

#그래 그리기

while xcor<=50:

ycor=(a*(xcor**2)) + (b*xcor)+c

pen.goto(xcor,ycor)

pen.pendown()

xcor += 0.5

여기서는 x값을 -50에서 50까지 0.5씩 증가시키며 그에 대응하는 y값을 계산하고, 이를 화면에 그립니다. 이 부분은 이차함수의 그래프를 그리는 핵심적인 코드입니다.

이 코드를 보고 나서, 이차방정식의 해를 구하는 방식과 그에 따른 그래프를 그리는 과정을 잘 이해할 수 있었습니다. 이 코드는 수학적 개념을 시각적으로 표현할 수 있게 도와주는데, 특히 turtle을 이용한 그래프 그리기는 재미있고 직관적입니다. 하지만 코드에서 약간의 오류가 있는 부분도 있어 그 부분을 고쳐서 정확하게 실행되도록 해야 할 것 같습니다. 예를 들어, 방정식의 근을 구하는 부분에서 괄호의 위치나 계산 순서를 좀 더 신경 써야 할 필요가 있습니다. 또한, 판별식에 따라 근을 다르게 계산하는 로직도 잘 처리되어 있어, 각기 다른 근의 유형을 쉽게 알 수 있었습니다. 그래프를 그리면서 이차방정식이 어떻게 시각적으로 나타나는지 직접 볼 수 있다는 점이 인상 깊었습니다.

# data[].attributes.body
이차함수 그리기 프로그램

# tutle 임포트

import turtle

t = turtle. Turtle()

t.shape("turtle")

# 사용자 정의 함수를 생성해서 이차함수의 그래프값을 입력

def f(x):

return 2 x*2 + 1

# x축과 y축 그리기

t.goto(200,0)

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

# 생성한 함수에서 나온값을 turtle로 그리기

for x in range(100): # 함수의 값은 끝이없기때문에 100번만 반복한다

t.goto(x, int(0.01*f(x))) # 값이 너무 커지기때문에 0.01을 곱한값을 그린다

이차함수의 근의 종류, 그래프그리기

# turtle 임포트

from turtle import *

import math

# 이차함수의 그래프값 입력

a = int(input("x²의 계수를 입력하세요 : "))

b = int(input("x의 계수를 입력하세요 : "))

c = int(input("상수항을 입력하세요 : "))

# 이차함수 판별식

d = b**2 - 4*a*c # 판별식이 양수일때, 음수일때, 0일때의 근의 종류가 모두 다르기때문에 세 경우를 구분한다

# 판별식의 값이 양수일때

if (d > 0):

x1 = (-b + math. sqrt(d))/2 * a

x2 = (-b - math. sqrt(d))/2 * a

print("첫번째 근 :", x1)

print("두번째 근 :", x2)

# 판별식의 값이 0일때

if (d == 0):

x1 = (-b)/2 * a

print("중근 :", x1)

# 판별식의 값이 음수일때

if (d < 0):

x1 = (-b + math. sqrt(-d))/2 * a

x2 = (-b - math. sqrt(-d))/2 * a

print("첫번째 근 :", x1, "i")

print("두번째 근 :", x2, "i")

#그래프 그리기

# x축, y축, 원점을 그리고 각각 표시한다

y = Turtle()

y.goto(0, -200)

y.goto(0, 200)

y.setheading(90)

y.write("y")

x = Turtle()

x.goto(-200, 0)

x.goto(200, 0)

x.write("x")

o = Turtle()

o.penup()

o.hideturtle()

o.goto(0, 0)

o.write("o")

# 그래프를 그릴준비를 한다

pen= Turtle()

pen.penup()

pen.goto(0, 0)

pen.pensize(1)

# 초기 x값 설정(정의역)

xcor = -50

# x가 증가함에 따라 나오는 y값을 그린다

while(xcor <= 10):

ycor = (a*(xcor**2)) + (b*xcor) + c

pen.goto(xcor, ycor)

pen.pendown()

xcor += 0.5

평소에 수업을 하면서 하던 숫자만을 계산하는 프로그래밍이 아니고, 우리가 직접 수업시간에 배운 내용들을 프로그래밍과 접목시켜서 직접 시각적으로 확인할수있는것이 정말 새롭고 신기하고 재미있었다. 그리고 숫자로만 배우던 이차함수를 직접 프로그래밍으로 계산하니 이차함수가 더 잘 기억났고, 그래프가 그려지는것이 신기했다.