# data[].attributes.body
#x^2+1 함수 그리기

import turtle

t=turtle.Turtle()

t.shape("turtle")

def f(x): #사용자 정의 함수를 생성해 이차함수 그래프값 입력

return x**2+1

t.goto(200,0) #x축과 y축을 그림

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

for x in range(150): #150번을 반복하며 f(x) 함수에 0.01씩 곱한 값의 정수값 만큼 그림을 그림

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

소감문

나는 파이썬 으로는 그림을 그릴수 없다고 생각했는데 터틀 이라는 것으로 그림을 그릴수

있다는것에 놀랐고 그냥 그림이 아닌 무려 이차함수도 파이썬 프로그램을 사용하면 그릴수

있다는 것에도 흥미를 느꼇다.그리고 파이썬의 잠재력은 어마어마 하다는 것을 느꼇다.

# data[].attributes.body
import turtle

screen = turtle.Screen()

screen.bgcolor("white")

boat = turtle.Turtle()

boat.speed(5)

boat.penup()

boat.goto(-150, -50)

boat.pendown()

boat.color("brown")

boat.begin_fill()

boat.setheading(270)

boat.circle(150, 180)

boat.setheading(0)

boat.end_fill()

boat.penup()

boat.goto(0, -50)

boat.pendown()

boat.color("black")

boat.pensize(3)

boat.setheading(90)

boat.forward(150)

boat.penup()

boat.goto(0, 100)

boat.pendown()

boat.color("gray")

boat.begin_fill()

boat.setheading(45)

boat.forward(100)

boat.setheading(135)

boat.forward(100)

boat.setheading(270)

boat.forward(70)

boat.end_fill()

boat.hideturtle()

screen.mainloop()

먼저 통통배 몸통을 그리기 위해 색깔을 갈색으로 바꾸고 밑으로 반원을 그리며 반 바퀴을돌고 그 뒤 반대 방향으로 직선으로 직진한다.

그리고 기둥을 만들기위해 색을 검정으로 바꾸고 위로 올라간다.

마지막으로 돛을 만들기 위해 색을 회색으로 바꾸고 밑으로 한번 반대방향 밑으로 다시한번해서 돛대을 만들면 완성이다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.pendown

t.left(90)

t.forward(200)

t.right(90)

t.forward(200)

t.right(90)

t.forward(200)

t.right(90)

t.forward(200)

t.right(180)

t.forward(30)

t.right(270)

t.forward (180)

t.right(90)

t.forward(150)

t.right(90)

t.forward(190)

딱봤을 때는 반도체같지 않고 이게 무엇인가 하는 의문이 들 수 있지만 반도체를 프로그래밍한것이다

일단 큰 정사각형 모양을 만들어서 외부모양을 만들었고

작은 직사각형 모양을 만들어서 내부모양을 만들었다

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.shape('turtle')

t.color('blue')

def f(x):

return -x**2+1

t.goto(250,0)

t.goto(0,0)

for x in range(100):

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

import turtle

t=turtle.Turtle()

t.shape('turtle')

t.color('blue')

def f(x):

return x**2+1

for x in range(100):

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

모양은 거북이로 하고 색을 파란색으로 바꾸었다.

이차함수식을 쓰고 x축과 y축을 그려서 계속 그릴수는 없으니까 0.01을 곱해서 끝을 낸다. 이번엔 이차함수가 우리가 알던대로 그려서 화살표 모양을 만들었다.

이 활동을 하면서 너무 힘들었다. 제대로 알고있는 식이 없고 숫자를 바꿔도 내가 원하는 그림이 나오지 않아서 속상했다. 그래도 계속 시도하면서 점점 그림이 나와 결국 화살표모양을 만들었다. 화살표는 방향을 나타내주는데 앞으로 내가 갈 길을 안내해주는것처럼 보여서 화살표를 선택했다. 또 이차함수는 내가 가고싶은 학과인 수학교육과와도 연관이 있어서 선택하였다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

def draw_square():

t.begin_fill()

t.fillcolor("gray")

for _ in range(2):

t.forward(100)

t.right(90)

t.forward(40)

t.right(90)

t.end_fill()

draw_square()

직사각형을 그리고 회색으로 칠해서 금속주괴를 그린 것이다.

# data[].attributes.body
#포물선 궤적 그리기

import turtle

t=turtle.Turtle()

t.shape('turtle')

def f(x):

return -0.01*(x**2)+100

t.shape('classic')

t.goto(0,200)

t.goto(0,-200)

t.goto(0,0)

t.goto(200,0)

t.goto(-200,0)

t.color('red')

for x in range (-100,101):

t.goto(x*2, f(x))

포물선 운동을 궤적을 표현 했다.

f(x) 함수를 정의해서 아래로 열리는 포물선을 만들었다. turtle로 x축 y축을 그려 기준을 설정하고 범위를 -100부터 100까지 지정하였다. 값이 너무 커지지 않도록 식을 조정하였다. 이 포물선은 투사체의 궤적, 물리학을 이해하는데 유용하다. 진로에서 물리 엔진의 구현이 중요하다고 느꼈고 수학과 프로그래밍의 결합이 어떻게 사용되고 도움이 되는지 알 수 있었다. 내가 스스로 만들면서 큰 흥미를 느꼈고 복잡한 구조는 그리지 못했지만 유익했다. 그림이 제대로 나왔을 때 성취감을 느꼈다. 더욱 프로그래밍 실력을 향상해 많은 것을 해보고 싶다.

# 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,"i",")","/",2*a)

print("두번째 근 :","(",-b,"-","√",d,"i",")","/",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()

x.goto(0,0)

x.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

이차함수의 폭이 약간 이상하게 나오기는 했지만 학습지에 나오는 것을 사용하여 이차함수 그래프를 그렸다

# data[].attributes.body
import turtle

pen=turtle.Turtle()

pen.speed(0)

pen.penup()

pen.goto(0,-100)

pen.pendown()

pen.circle(100)

continents=[(-30,20),(40,0),(-40,-30)]

for x,y in continents:

pen.penup()

pen.goto(x,y)

pen.pendown()

pen.dot(20)

pen.goto(10,20)

pen.pendown()

pen.dot(20)

pen.goto(20,-20)

pen.pendown()

pen.dot(20)

pen.goto(40,-40)

pen.pendown()

pen.dot(20)

pen.goto(50,50)

pen.pendown()

pen.dot(20)

pen.hideturtle()

turtle.done()

파이선 turtle로 외교관의 비행항로를 그려보았는데 먼저 터틀 모듈을 불러오고 turtle()객체를 생성해 pen 변수에 저장한다 그다음에 펜의 좌표를 지정하고 pen,circle(100)을 통해서 원의 반지름을 지정하고 continents로 점의 좌표리스트를 저장하고 그리고 pen.dot()를 통해 원안에 점을 찍어 외교관의 비행항로를 완성하였다 제일 처음에는 원밖으로 점이 찍혔지만 좌표를 잘못찍어서 원밖으로 점이 찍혔다는것을 알고 좌표를 수정해 그림을 완성하였다

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.shape('turtle')

t.color('red')

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.forward(15)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.forward(15)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.forward(15)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.forward(15)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.forward(15)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.forward(15)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

t.left(35)

t.forward(100)

t.left(100)

t.forward(60)

t.left(45)

사각형 여러개를 그려 입체 도형처럼 만들었다

# data[].attributes.body
import turtle

def draw_heart():

"""하트를 그리는 함수"""

turtle.speed(3)

turtle.color("red")

turtle.begin_fill()

# 하트 그리기

turtle.left(50)

turtle.forward(100)

turtle.circle(50, 180)

turtle.right(90)

turtle.circle(50, 180)

turtle.forward(100)

turtle.end_fill()

def main():

draw_heart()

turtle.hturtle()

turtle.done()

if name == "main":

main()

속도를 3으로 설정하여 빨강색으로 안을 채운 후 앞으로 가고 원 그리기를 반복하여 하트를 만들었다. 이 활동을 하면서 막상 코드를 짜보는 것이 쉽지는 않았지만 여러 시행착오 끝에 원하는 이미지가 나왔기에 뿌듯하다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.color('brown')

t.left(90)

t.forward(100)

t.right(180)

t.forward(300)

t.right(90)

t.forward(30)

t.right(90)

t.forward(300)

t.right(90)

t.forward(90)

t.left(90)

t.forward(40)

t.left(90)

t.forward(150)

t.left(90)

t.forward(40)

t.left(90)

t.forward(150)

t.left(90)

t.forward(40)

t.left(90)

t.forward(5)

t.right(90)

t.forward(90)

t.left(90)

t.forward(10)

t.left(90)

t.forward(5)

t.right(90)

t.forward(5)

t.right(90)

t.forward(5)

t.left(90)

t.forward(20)

t.left(90)

t.forward(5)

t.right(90)

t.forward(5)

t.right(90)

t.forward(5)

t.left(90)

t.forward(100)

t.left(90)

t.forward(90)

내가 그린 것은 붓이다. 붓은 그릴 수 있는 무궁무진한 가능성을 나타내며 나의 진로인 미술 분야와도 깊은 연관이 있기 때문에 프로그래밍으로 형상화했다. 어려운 프로그램은 아니지만 몇 번의 시행착오를 겪으며 완성해내서 뿌듯하다.

# 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,"i",")","/",2*a)

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

#판별식 =0 - 중근

elif d==0:

x1=(-b)/2*a

print("중근 :",x1)

#판별식 <0 - 허근

else 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()

x.goto(0,0)

x.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

평소 그래프를 그리는 어플에 흥미를 가지고 있었기에 파이썬을 이용해서 이차함수의 근을 구하고 이차함수를 그려서 보여주는 프로그램을 만들어보았다. 입력 단계에서 각 항의 계수와 상수항을 입력받고 이를 정수로 전환하기 위해 int를 사용했고, 이차함수가 두 실근, 중근, 허근을 가질 수 있기에 이를 나누기 위해 판별식을 사용하여 경우를 나누었다. 이때 elif를 사용하여 코드를 약간 변경하였다. 또 근의 공식과 꼭짓점 좌표를 구하는 식을 이용하여 각각의 경우의 근을 구하고 값을 출력하였다. 이후 Turtle을 이용하여 x, y축과 그래프를 잘 구현하였다.

파이썬 프로그램으로 사용자가 입력한 이차함수의 식을 계산하고 그래프를 시각화 하는 것이 흥미로웠고, 파이썬이 다양한 분야에서 활용될 수 있음을 실감할 수 있게 되었다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.pendown

t.left(90)

t.forward(250)

t.right(50)

t.forward(30)

t.right(90)

t.forward(25)

t.right(130)

t.forward(40)

t.right(140)

t.forward(20)

t.pensize(3)

t.forward(10)

t.right(90)

t.forward(10)

t.right(130)

t.forward(15)

t.penup()

t.home()

t.pendown()

t.pensize(0)

t.forward(40)

t.left(90)

t.forward(250)

t.penup()

t.home()

# 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*b

#판별식>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('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

# data[].attributes.body
import turtle #x^2+1 함수 그리기

t=turtle.Turtle()

t.shape("turtle")

a=int(input('최고차항의 계수:')) #최고차항의 계수 입력받기

def f(x): #사용자 정의 함수를 생성해 이차함수 그래프값 입력

return a*x**2+1

t.goto(200,0) #x축과 y축을 그림

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

for x in range(150): #150번을 반복하며 f(x) 함수에 0.01씩 곱한 값의 정수값 만큼 그림을 그림

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

수학 공부를 하던 중에 2차방정식에 대한 내용이 있었다. 이 내용을 공부할 때 계수에 따라 그래프가 어떻게 변화하는지 아는것이 중요하다는 것을 알게되었다. 그래서 원하는 최고차항의 계수를 입력받아 시각적으로 표현하는 프로그램을 만들게 되었다.

# data[].attributes.body
import turtle

#화면 크기

turtle.setup(1000, 1000)

# 10x10 그래프 그리기 함수

turtle.speed(0)

turtle.penup()

for i in range(-500, 501, 100):

turtle.goto(-500, i)

turtle.pendown()

turtle.goto(500, i)

turtle.penup()

turtle.goto(i, -500)

turtle.pendown()

turtle.goto(i, 500)

turtle.penup()

turtle.goto(-500, 0)

turtle.pendown()

turtle.goto(500, 0)

turtle.penup()

turtle.goto(0, -500)

turtle.pendown()

turtle.goto(0, 500)

turtle.penup()

# 일차 함수

def one(a, b):

turtle.penup()

turtle.color("red")

for x in range(-500, 501, 1):

y = a * x + b

if -500 <= y <= 500:

turtle.goto(x*100, y*100)

turtle.pendown()

print("end")

# 이차 함수

def two(a, b, c):

turtle.penup()

turtle.color("blue")

for x in range(-500, 501, 1):

y = a*(x-b)**2+c

if -500 <= y <= 500:

turtle.goto(x*100, y*100)

turtle.pendown()

print("end")

# 사용자 입력 받기

# 그후 각 함수항에 맞는 수 받기

gr = input("그릴 함수 유형을 선택하세요 (1: 일차 함수, 2: 이차 함수): ")

if gr == '1':

a = int(input("일차 함수 일차항 :"))

b = int(input("일차 함수 상수항 :"))

one(a, b)

elif gr == '2':

a = int(input("이차 함수 기울기 :"))

b = int(input("이차 함수 x 좌표 :"))

c = int(input("이차 함수 y 좌표:"))

two(a, b, c)

#창 안닫히는 역할

turtle.done()

10x10 그래프 좌표평면을 그리고 사용자에게 일차함수 중 이차함수 하나를 선택한 뒤 그 값을 받아 그리는 코드이다.

처음에 함수 그릴 걸 생각을 안한 상태로 좌표평면을 그리고 그래프 함수를 작동했었는데, 크기가 작아서 '왜 작지?'라는 생각을 했었는데 터틀 모듈이 픽셀 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,"i",")","/",2*a)

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

#판별식 =0 - 중근

elif d==0:

x1=(-b)/2*a

print("중근 :",x1)

#판별식 <0 - 허근

elif 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()

x.goto(0,0)

x.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

평소 그래프를 그리는 어플에 흥미를 가지고 있었기에 파이썬을 이용해서 이차함수의 근을 구하고 이차함수를 그려서 보여주는 프로그램을 만들어보았다. 입력 단계에서 각 항의 계수와 상수항을 입력받고 이를 정수로 전환하기 위해 int를 사용했고, 이차함수가 두 실근, 중근, 허근을 가질 수 있기에 이를 나누기 위해 판별식을 사용하여 경우를 나누었다. 이때 elif를 사용하여 코드를 약간 변경하였다. 또 근의 공식과 꼭짓점 좌표를 구하는 식을 이용하여 각각의 경우의 근을 구하고 값을 출력하였다. 이후 Turtle을 이용하여 x, y축과 그래프를 잘 구현하였다.

파이썬 프로그램으로 사용자가 입력한 이차함수의 식을 계산하고 그래프를 시각화 하는 것이 흥미로웠고, 파이썬이 다양한 분야에서 활용될 수 있음을 실감할 수 있게 되었다.