# data[].attributes.body
import turtle

pen = turtle.Turtle()

pen.fillcolor("yellow")

pen.begin_fill()

for _ in range(5):

pen.forward(100)

pen.right(144)

pen.end_fill()

pen.hideturtle()

이 그림을 만들면서 어려운 점은 별의 각도를 그리는 것이 어려웠으나 그 뒤로는 순조로웠다

# 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('beige',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()

진로가 지금은 헤어쪽이기 때문에 사람들 머리를 잘 잘라주고 머리를 예쁘게 만들어 주겟다는 내 표정을 나타냈다

얼굴 눈 눈동자 입을 하나하나 색을 쓰고 함수를 그려내 쓰고 색을 채워 허전하지 않게 나타냈다 코와 목을 나타내지 못해 조금은 아쉽고 다 처음보는 식이 아니리 힘들지는 않았지만 하나하나 쓰는거에 조금 힘들었고 내가 쓴 식들이 하나의 그림으로 만들어지니까 신기하고 재미있었다

# data[].attributes.body
#파이선의 터틀을 이용한 물 분자구조 그리기

import turtle

screen = turtle.Screen()

screen.bgcolor("white")

t = turtle.Turtle()

t.speed(3)

def draw_atom(radius, color):

t.begin_fill()

t.fillcolor(color)

t.circle(radius)

t.end_fill()

t.penup()

t.goto(0, -50)

t.pendown()

draw_atom(50, "red")

t.penup()

t.goto(-120, 40)

t.pendown()

draw_atom(30, "white")

t.penup()

t.goto(120, 40)

t.pendown()

draw_atom(30, "white")

t.penup()

t.goto(0, -50)

t.pendown()

t.pensize(3)

t.goto(-120, 40)

t.penup()

t.goto(0, -50)

t.pendown()

t.goto(120, 40)

t.hideturtle()

turtle.done()

평소 관심 있는 주제인 화학에서 물 분자 구조를 파이선의 터틀을 이용해 표현하였다. 가운데 빨간색원은 산소 원자, 두 개의 흰 원은 수소원자이다. 결합선을 원하는대로 표현하지는 못했지만 잘 표현 한 것 같다.

# data[].attributes.body
import turtle

pen = turtle.Turtle()

pen.fillcolor("yellow")

pen.begin_fill()

for _ in range(5):

pen.forward(100)

pen.right(144)

pen.end_fill()

pen.hideturtle()

이 그림을 만들면서 어려운 점은 별의 각도를 그리는 것이 어려웠으나 그 뒤로는 순조로웠다

# 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)

t.goto(0,0)

t.goto(0,200)

t.goto(0,0)

for x in range(170):

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

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

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

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

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

print('두번째 근:',x2,'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(0,-200)

x.goto(0,200)

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

# 화면 설정

screen = turtle.Screen()

screen.title("캐리어 그리기")

screen.bgcolor("white")

t = turtle.Turtle()

t.speed(1)

# 캐리어 본체 그리기

t.penup()

t.goto(-50, -100) # 시작 위치

t.pendown()

t.fillcolor("silver")

t.begin_fill()

for _ in range(2):

t.forward(100) # 가로

t.left(90)

t.forward(200) # 세로

t.left(90)

t.end_fill()

# 바퀴 그리기

t.penup()

t.goto(-40, -100) # 왼쪽 바퀴 위치

t.pendown()

t.fillcolor("black")

t.begin_fill()

t.circle(20) # 왼쪽 바퀴

t.end_fill()

t.penup()

t.goto(40, -100) # 오른쪽 바퀴 위치

t.pendown()

t.begin_fill()

t.circle(20) # 오른쪽 바퀴

t.end_fill()

# 캐리어 손잡이 그리기

t.penup()

t.goto(-20, 100) # 손잡이 시작 위치

t.pendown()

t.setheading(90) # 위쪽으로 향하게

t.forward(40) # 손잡이 길이

t.right(90)

t.forward(10) # 손잡이 너비

t.right(90)

t.forward(40) # 손잡이 길이

t.right(90)

t.forward(10) # 손잡이 너비

# 완성

t.hideturtle()

turtle.done()

이 코딩은 Tutle 함수를 이용하여 내 진로인 여행가이드인 점을 이용하여 캐리어를 그리는 코드이다.

캐리어 본체, 바퀴, 손잡이를 간단하게 그릴 수 있도록 구성되어 있다.

하면서 어려웠던 점은 처음에는 좌표시스템을 알아야해서 거기서 살짝 헷갈리는 부분이 있었고 반지름을 설정하는 부분에서도 어려움을 느꼈던거같다

그리고 색을 정할때 어떤색이 가장 무난하고 이뻐보일까 선택하는 과정에서도 고민이 많았던거같다

그리고 캐리어의 비율을 맞추는데 어려움이 있었던거같다 많이 시도하면서 적절한 크기를 찾는데 시간이

걸렸던거같다. 그리고 바퀴와 손잡이를 연결하는 부분에서 위치 조정이 어려워서 여러번 수정했던거 같다

나중에는 더 복잡하고 어려운 코딩도 도전해보고 싶다

# 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, 100)

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

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

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

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

승무원이 진로이기 때문에 서비스 직업의 필수자재인 미소 , 스마일을 그리려고 시도했다. 얼굴을 100,0,0으로 잡고 눈을 30,-40,100으로 잡고 눈동자를 15,-40,100으로 잡고 입을 15,0,20으로 잡았다

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.shape('turtle')

def f(x):

return x**2

def f(y):

return y**2

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

for y in range(150):

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

우선 수학을 꿈의 목표로 생각한것은 아닌데 막상 프로그램으로 무언가를 그리라고 하니 수학 그래프밖에 생각이 나지 않아서 그래프를 그리게 되었다.

그리고 원래는 1사분면만 그릴게 아니라 2사분면까지 그릴생각이였는데 이상하게 2사분면이 아닌 4사분면으로 향하여 그림이 그려져서 마음에 들지않아서 4사분면까지 그리는 코드를 모두 지워버리고 1사분면만 그려지는 코드만 남긴채 그렸다.

이 그림을 그리면서 느낀점은 우선 프로그램이 내가 생각하는데로 막 그려지는게 아니라서 복잡하고 스트레스가 막 발생한다는것 이였다. 계속 쓸대없이 4사분면으로 향하는 그림을 보며 어이가 없고 뭐가 잘못됐는지 몰랐다.

지금도 어떻게 2사분면에 그리는건지 잘 모르겠지만 나중에 한번 배워 보고싶다.

# data[].attributes.body
import turtle

t=turtle.Pen()

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.right(30)

t.forward(50)

t.left(180)

t.forward(50)

t.left(30)

t.forward(25)

t.right(150)

t.forward(50)

t.right(110)

t.forward(40)

t.left(50)

t.forward(20)

t.right(30)

t.forward(50)

t.right(30)

t.forward(25)

t.left(60)

t.forward(40)

t.right(120)

t.forward(55)

터틀을 활용하여 고양이의 모습을 그렸다. 원을 만드는 방법을 터득하지 못하여 각진 형태의 모습을 갖춘 것이 아쉽게 느껴졌다. 고양이의 뾰족한 귀를 만드는 데 각도를 신경 써서 만들었고 선의 색을 흰색으로 만들어 눈 코 입과 연결되는 부분을 안 보이게 하여 코딩하고 싶었으나 하지 못하여 아쉽다. 이번 활동으로 원하는 동물 형태를 그려볼 수 있는 시간이 되어 좋았고 형태에 대해 더 이해도를 가질 수 있게 되었다. 다음에 하게 된다면 완벽한 고양이의 형태를 가진 모습을 그려보고 싶다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

def f(): #한 변 그리기

t.forward(100)

t.left(60)

def h(): #육각형 그리기

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

def g(): # 세개 그리기

h()

t.forward(100)

t.right(60)

g(),g(),g()

turtle.exitonclick

t.color(1,0.3,1)

t.circle(30)

t.up()

t.forward(100)

t.down()

import turtle

t=turtle.Turtle()

t.home()

t.color(1,0.3,1)

t.circle(30)

t.up()

t.forward(30)

t.down()

진로가 생명공학과여서 그에 맞는 분자구조를 그렸다.분자구조가 벌집 모양에 동그라미가 사이사이 박혀있는 모양이라서 이렇게 분자 구조를 그렸다. 생명과학에서 분자구조가 유용하게 쓰이고,실험할때도 DNA만큼이나 중요한 부분이기 때문에 그렸다. 아스피린 분자구조와 유사하게 그리려고 노력을 많이 했다. 또한 화학식을 나타내기에 육각형 모양이 필수여서 코딩할때 육각형을 위주로 코딩을 실행했다. 분자구조들은 동그리미가 더 많이 그려져있지만 실행하는데 조금 어려움이 있어서 현실적으로 그리지못한게 조금 아쉽다. 다음에는 더 잘해보고싶다는 생각이 들었다.

# data[].attributes.body
import turtle

t=turtle.Pen()

t.forward(300)

t.left(270)

t.forward(150)

t.left(270)

t.forward(300)

t.left(270)

t.forward(150)

import turtle

t=turtle.Pen()

t.forward(150)

t.left(70)

t.forward(40)

import turtle

t=turtle.Pen()

t.forward(150)

t.left(120)

t.forward(40)

import turtle

t=turtle.Pen()

t.left(270)

t.forward(150)

t.left(90)

t.forward(30)

t.left(270)

t.forward(25)

t.left(90)

t.forward(10)

t.left(90)

t.forward(25)

import turtle

t=turtle.Pen()

t.left(270)

t.forward(150)

t.left(90)

t.forward(255)

t.left(270)

t.forward(25)

t.left(90)

t.forward(10)

t.left(90)

t.forward(25)

장래희망이 pd이고 진학하고 싶은 학과도 미디어 관련 학과여서 가장 대중적이고 대표적인 미디어 매체인 TV를 터틀을 활용하여 그리게 되었다. 가장 먼저 tv 본체를 사각형으로 그렸고, 그 위에 안테나를 그려넣어 자칫하면 직사각형으로만 보일 수 있는 그림을 조금 더 tv 이모지에 가깝도록 하였다. 마지막으로 tv를 지탱할 수 있는 다리를 코딩하여 이미지를 완성했다. 처음 tv를 그릴 때 큰 직사각형 안에 작은 직사각형을 그려넣어서 일반적으로 tv를 떠올렸을 때 아는 그림처럼 하고 싶었는데 작은 직사각형을 코딩하여 실행하니 큰 직사각형에 들어간 형태가 아니라 시작점이 같아 겹쳐진 형태로 그려졌다. 이를 해결하기 위해서 여러가지 방법을 시도해 봤지만 오류가 나서 실행이 되지 않거나, 똑같이 겹쳐지는 경우가 계속해서 반복되었다. 따라서 큰 직사각형이 안에 작은 직사각형을 포함한 모양의 tv를 그리지 못하게 되었다. 이 점이 아쉽고, 어떻게 하면 내기 의도한 대로 그려지는 지 알고 싶어졌다. 또 코딩이 너무 긴 것 같고, 반복되는 명령어들이 많아서 이를 줄여 더 간단하게 그려낼 수 있는 방법은 있는지 궁금하다.

# data[].attributes.body
import turtle

t=turtle.Pen()

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(10)

t.left(10)

t.forward(100)

t.forward(100)

t.left(120)

t.forward(100)

t.left(120)

t.forward(100)

t.left(120)

t.forward(100)

t.forward(80)

t.forward(80)

t.left(90)

t.forward(100)

t.left(90)

t.forward(100)

t.left(90)

하나하나 숫자를 넣어가며 도형을 만들어가는 것 이 재미있었따. 다른 모양들도 만들어보고 싶다.

t.forward(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

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)

elif d==0:

x1=(-b)/2*a

print('중근:',x1)

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= Turtle()

y.goto(0,-2000)

y.goto(0,2000)

y.setheading(90)

y.write('y')

x= Turtle()

x.goto(-2000,0)

x.goto(2000,0)

x.write('x')

o = Turtle()

o.penup()

o.hideturtle()

o.goto(0,0)

o.write('y')

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제곱의 계수와 x의 계수와 상수항의 계수를 문자 값으로 1,-10,-200으로 저장한 다음, 판별식을 이용하여 이차함수의 두 근:20,-10을 구하고 그것을 이용하여 그래프를 그리는데 먼저 y축과 x축, 그리고 원점을 설정한 다음 초기 x값을 -50으로 설정하고 그 다음 내가 정한 이차함수 그래프를 그렸다.

이 활동을 하면서 어려웠던 점은 이차함수의 계수들을 저장하여 두 근을 구하는 방법은 쉬웠지만 뒤에 이 이차함수를 활용하여 그림을 그리는 것에서 어려움을 조금 느꼈다. 초기 x값을 설정하고 그림을 그리니 이차함수 그래프가 내가 생각했던 것보다 더 길게 나와 당황하였고 이것을 해결하기 보다는 x축과 y축을 더 길게 함으로써 x축과 y축과 그래프의 크기를 맞춰주었다.

이 활동은 이차함수를 그리는 가장 기본적이 활동이었지만 이 활동을 활용하여 더 다양한 것들을 만들수 있다고 생각하니 다른 것들은 어떻게 해야 만들수 있는지 궁금해지는 활동이었다.

# 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 )

elif D==0:

x1=(-b)/2*a

print('중근 : ',x1)

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=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(-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

작성한 함수에 다양한 값의 계수들을 대입해서 나오는 여러 그래프의 모양을 살펴보았다.

프로그램에 계수를 입력하면 루트를 정리한 근과 정리하지 않은 근의 두 가지 형태가 나타난다. 상수항의 계수를 +_800까지는 그래프가 정상적으로 모두 그려지지만 상수항의 계수가 +_800을 넘어가는 값부터 그래프가 온전히 그려지지 않는다. 음수 쪽의 그래프만 그려지기도 하고 y값이 양수인 쪽이 안 그려지기도 한다. x축과 y축의 길이가 짧아서 나타나지 않는 것이라고 판단해 길이를 늘려봤음에도 그래프가 그려지지 않았다. 그래서 내가 작성한 프로그램에는 오류가 없는 것 같은데 어떤 부분이 잘 못 되어서 그래프가 안 그려지는지 잘 모르겠다.

# 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 )

elif D==0:

x1=(-b)/2*a

print('중근 : ',x1)

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=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(-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

분석:

이 프로그램은 이차 방정식의 근을 구하고, 이차 함수의 그래프를 그리는 프로그램입니다.

라이브러리 임포트: turtle과 수학적 계산을 위한 math 라이브러리를 임포트합니다.

사용자 입력: 사용자에게 이차 방정식의 계수 ( a ), ( b ), ( c )를 입력받는다.

판별식 계산: 입력받은 계수를 사용하여 판별식 ( D )를 계산합니다. 이 값은 방정식의 근의 개수를 결정합니다.

근 계산 및 출력: 판별식의 값에 따라 서로 다른 조건문을 통해 근을 계산하고 출력합니다. ( D > 0 )일 경우 두 개의 실근, ( D = 0 )일 경우 중근, ( D < 0 )일 경우 허근을 계산하여 출력합니다.

그래픽 설정: Turtle 그래픽을 설정하여 x축과 y축을 그리고 원점을 표시합니다.

이차 함수 그래프 그리기: 이차 함수의 그래프를 그리기 위해 x좌표를 -50부터 50까지 증가시키며 각 x좌표에 대한 y좌표를 계산하여 그래프를 그립니다.

종료: Turtle 을 종료하여 창이 닫히지 않도록 합니다.

이프로그램을 코딩하며 어려웠던점은 판별식을 작성할때와 프로그램 검토를 할때 전에 배웠던 수학개념이 필요해서 많이 생각을 했고 터틀 프로그램을 많이 써보지않아서 어색했던 부분이 있었던것같다.

보완이 필요한점은 그래프의 축은 빠르게 그려지지만 그래프는 그려지는데에 시간이걸려서 이점을 보완해야할것같다.

# data[].attributes.body
# yellow E(ducation) 만들기

import turtle

screen = turtle.Screen()

screen.bgcolor("white")

t = turtle.Turtle()

t.pencolor('yellow')

t.pensize(5)

t.speed(2)

t.penup()

t.goto(-50, 0)

t.pendown()

t.left(90)

t.forward(100)

t.penup()

t.goto(-50, 50)

t.pendown()

t.setheading(0)

t.forward(50)

t.penup()

t.goto(-50, 0)

t.pendown()

t.setheading(0)

t.forward(50)

t.penup()

t.goto(-50, 100)

t.pendown()

t.setheading(0)

t.forward(50)

t.hideturtle()

교육을 상징하는 영어단어 E(ducation)과 유아교육의 상징 색인 노란색을 합쳐 유아교육을 표현했다. 터틀을 활용하여 그림을 만드는 게 처음이라 어려웠지만, 여러 시도도 해보고 여러 입력도 해보며 그림을 완성해냈다. 컴퓨터 속에서 글자로 그림을 구현해낸다는 것이 어려울 줄 알았지만, 막상 해보니 누구나 쉽게 할 수 있는 거 같아 이 시간을 통해 정보와 코딩에 한 층 더 가까워진 느낌이 들었다. 표현해낸 E는 단순히 글자가 아니라 유아의 상징색과 합쳐 '유아교육'이라는 뜻이 있는 심벌마크를 만들어 냄으로써 나의 진로와 연관을 지었다. 이처럼 코딩과 정보를 통해 나의 진로에 더욱 탐구하게된 계기가 되었다. 나의 진로와 어떻게 연관지을 지 여러 모양, 색, 글자를 탐구하고 조사하며 유아교육과 관련된 진로에 대한 역량을 키울 수 있었다. 뜻깊은 시간이였다.

# data[].attributes.body
import turtle

t = turtle.Pen()

# 칠판

t.fillcolor("dark green")

t.begin_fill()

for i in range(2):

t.forward(400)

t.left(90)

t.forward(200)

t.left(90)

t.end_fill()

# 책

t.forward(200)

t.color('white')

t.left(270)

t.forward(30)

t.left(270)

t.color('black')

t.forward(100)

t.left(90)

t.forward(80)

t.left(90)

t.forward(200)

t.left(90)

t.forward(80)

t.left(90)

t.forward(120)

t.left(180)

t.forward(20)

t.left(270)

t.forward(80)

Turtle 라이브러리를 사용해서 교육의 상징적 아이콘인 칠판과 책을 표현했다. 도형을 만들다보니 코드가 점점 복잡해져서 중간에 아주 헷갈렸었다. 그러나 이전에 정보 시간에 배운 for 반복문을 사용하여 불편함을 줄였다. 어려운 점이 많았지만 전에 배운 내용들을 떠올리며 활용하니 잘 나타낼 수 있었다. 프로그래밍을 배우면서 한때는 칠판과 책으로만 할 수 있었던 배움을 디지털을 통해 컴퓨터로 배울 수 있었다는 점이 내게 크게 다가왔다.

# data[].attributes.body
import math

from turtle import *

# 함수계산 프로그램

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, ")")

elif D == 0:

x1 = -B / (2 * A)

print("중근: ", x1)

else: # D < 0

real_part = -B / (2 * A)

imaginary_part = math.sqrt(-D) / (2 * A)

print("첫번째 근: ", real_part, "+", imaginary_part, "i")

print("두번째 근: ", real_part, "-", imaginary_part, "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("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

end() # 그래픽 종료 방지

수정내용:

코드의 근 계산 부분에서 괄호를 추가하여 연산 순서를 명확히 하고, 허근을 계산할 때 math.sqrt(-D)를 사용하도록 수정했고, 그래프를 그릴 때 사용되는 변수도 올바르게 수정했습니다. 또 end() 함수를 추가하여 그래픽이 종료되지 않도록 했습니다.

느낀점:

제 희망 진로가 상경 계열의 학과인데, 상경 학과 공부를 하기 위해서 그래프에 대한 이해가 필요하다고 생각해서 함수 f(x)=x^2+x+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("두번째 근 :", x1r, "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+=0.5

이 파이썬 코드는 맨처음에 math라는 모듈을 불러와서 이차함수까지 그리게 되는 코드인데요. 원래 이차함수의 방정식이 aX^2+bX+c 인데요. 맨처음 이 코드를 사용하는 사용자는 각각a,b,c자리에 맞는 수를 입력하게 됩니다. 이것을 입력하고 나서 만들어진 식에 따라 판별식을 거치게 됩니다. 판별식을 해서 나온 수를 d에 저장하고 뒤쪽에 있는 서로 다른 두 실근이 나오는 경우, 중근을 가지는 경우, 허근을 가지는 경우를 각각 맞는 상황에 따라 if문을 적용시킵니다. 이 if문을 거쳐서 근을 얻게됩니다. 이제 Turtle함수를 이용해 이차함수를 그리는데요. y축과 x축을 긜고 원점을 찍은 다음 아까 구한 근에 맞추어 그래프를 그리게 됩니다. 이 함수를 그리는 코드를 만들며 많은 어려움을 겪었는데 맨 처음 했을때는 계속 오류가 나왔습니다. 이 오류를 해결하기 위해 코드를 해석하고 문장구조가 맞는지도 확인을 하였는데 오류를 못 찾았습니다. 하지만 다시 천천히 읽어보다가 한개의 오타를 발견을 하고 고치며 코드를 만들때는 사소한 오류도 코드를 실행하지 못하게 하는것을 알게 되었고 다시 오타를 고치고 코드를 실행하니 작동이 잘되는 것을 보았습니다. 하지만 그래프가 그려지는 것을 보며 왜 계수에 따른 별 차이가 없지라는 생각을 가졌습니다. 계수를 다르게 입력해도 그래프가 다 거의 비슷하게 생겼기 때문입니다. 하지만 이 그래프의 1이 어느정도인지를 모르니까 작은수를 넣는 것이 아니라 큰 수를 넣으면 괜찮아 질거같아서 큰수를 넣었더니 막힌문제를 해결하였습니다. 다 만들고 나니 뿌듯함을 느끼고 많은 다른 코드를 만들어 봐야겠다는 생각이 들었습니다.

# data[].attributes.body
#일대일대응 함수 만들기

import turtle

t=turtle.Turtle()

t.shape('turtle')

def f(x):

return x**2

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

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')

import turtle

t=turtle.Turtle()

t.shape('turtle')

def f(x):

return x**2

for x in range(0,-150,-1):

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

일대일대응은 한 x값에 대응하는 y값이 단 하나이고, 공역과 치역이 같은 함수이다. 이 함수의 대표적인 예는 일차함수인데, 일대일대응을 학습지에 나와있는 이차함수 프로그램을 통해 이차함수를 활용하여 나타내고자 하였다. 그래서 x>=0 일때는 y=x^^2로, x<0 일때는 y=-(x^^2)의 꼴로 나타내어 하나의 x값에 하나의 y값만이 대응되도록하였다. 그리하여

'for x in range(150):

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

이 부분을 두번째에서는 변형하여

'for x in range(0,-150,-1):

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

이렇게 표현해냄으로써 왼쪽 아래로 향하는 이차함수를 그려내었다.

# data[].attributes.body
import turtle

screen = turtle.Screen()

screen.bgcolor("white")

pen = turtle.Turtle()

pen.speed(5)

pen.pensize(3)

book_width = 250

book_height = 400

pen.penup()

pen.goto(-book_width//2, book_height//2)

pen.pendown()

pen.begin_fill()

pen.fillcolor("beige")

for _ in range(2):

pen.forward(book_width)

pen.right(90)

pen.forward(book_height)

pen.right(90)

pen.end_fill()

pen.penup()

pen.goto(-50, 100)

pen.pendown()

pen.begin_fill()

pen.fillcolor("white")

for _ in range(2):

pen.forward(100)

pen.right(90)

pen.forward(30)

pen.right(90)

pen.end_fill()

pen.hideturtle()

turtle.done()

나의 희망 진로계열은 인문사회 계열이다. 그래서 나는 터틀을 사용해 책이라는 사물을 그려 표현하였다. 많은 사물들 중에서 책을 선택한 이유는 책은 지식 함양과 문화적 교류, 학문적 성취를 이끌며 인문사회 계열과 밀접하게 맞닿아 있는 중요한 도구이기 때문이다.

책의 옆면으로 만들고 싶었지만 코딩을 잘 하는 편이 아니라서 만들기 쉽지 않아 결국 앞면으로 만들게 되어 아쉬웠다. 그래도 앞면이라도 잘 만들어진 것 같아 다행이라고 느꼈다.

# data[].attributes.body
import turtle

t=turtle.Turtle()

t.shape("turtle")

t.speed(5)

t.penup()

t.goto(-50,0)

t.pendown()

t.forward(100)

t.penup()

t.goto(0,50)

t.setheadng(270)

t.pendown()

t.forward(100)

turtle.done

십자가 모양을 만들어서 병원을 상징하는 모양을 만들고 싶었는데 시간이 부족해서 원하는대로 완성하지 못해서 아쉽긴 하지만 포기하지 않고 여러 번 시도한 것에 의미를 두고 싶다.

# data[].attributes.body
*실행결과:오류..

<기존코딩>

'''

import turtle

t=turtle.n()

t.forward(20)

t.left(20)

t.forward(20)

t.left(20)

for x in range(150):

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

'''

원래는 위에 코딩으로 실행을 해봤지만 직선 그래프만 그려지고, 내가 원하는 모양이 나오지 않았다. 그래서 코딩 함수에 관련한 여러 코딩들을 조사해보면서 함수를 이용한 애니메이

션도 있었지만 실제로 보지 않고 내가 직접 써서 실행하기도 너무 어려웠다. 그러다 정보시간에 배웠던 bgm을 응용해서 체중에 따라 함수 원의 색깔이 바뀌는 코딩을 만들었다.

<체중변화에 따른 색깔변화>

import turtle

screen = turtle.Screen()

screen.color("white")

weight_t = turtle.Turtle()

weight_t.shape("circle")

weight_t.color("green")

weight_t.penup()

def track_weight_change(weight):

weight_t.goto(weight * 10 - 100, 0)

weight_t.stamp()

weights = [50, 55, 60, 65, 70]

for weight in weights:

t_weight_change(weight)

screen.mainloop()

*제작

(1)학습지에 나왔던 import turtle로 시작해서 값을 screen으로 저장하고, 무게의 모양을 원으로 그리고 초록색으로 색 변화를 주었다.

(2)막상 코딩을 제작하니 원하는 함수가 나오지 않고 흰 배경만 나왔는데 t값이 무게와 모양, 색깔 등 변수가 제대로 저장이 되지 않거나 변수를 하나로 통일하지 않고 여러 값으로 저장해 제대로 된 결과값을 입력하지 못한 것 같다.

(3)간호분야에서는 혈액 검사나 약물 투여에 관한 신체반응이 매우 중요한데 그 중에서도 몸에서 가장 많은 변화인 체중변화는 예민한 반응성을 띄기 때문에 아이디어가 떠올랐다. 그래서 코딩에서 몸무게를 정상, 비만, 과체중, 고도비만 몸무게로 나누어 색깔에 따라 환자의 몸상태를 알려주고 싶었고, 체중변화를 통해서 몸에서 반응하는 이상신호나 증상을 환자가 파악할 수 있도록 돕는 코딩을 제작하려고 했었다. 기존 코딩에서는 간호사 모자를 만들려고 했었는데 처음 함수 코딩을 실행했을 때, 곡선 모양이 나오긴 했지만 한 직선으로만 쭉 뻗어나갔고, 모양을 만들기 위해선 선을 이리저리 연결돼야 하는데 함수값이 커지고 작아질때도 모두 한 곳으로 가 모양을 처음부터 잡기 어려웠다.

(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

#판별식 > 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=(-d)/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("두번째 근 :", x1r, "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축

y= Turtle()

y.goto(-200,0)

y.goto(200,0)

y.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)) + (bcor*xcor) + c

pen.goto(xcor , ycor)

pen.pendown()

xcor +=0.5

전에 학교에서 배웠던 함수로 그림을 그리는 프로그램을 작성하였다.x^2에 계수를 입력해서 a에 저장하고 x에 계수를 입력해서 b에 저장하며 상수를 c에 저장한 후 전에 배웠던 식인 판별식을 활용하여 서로 다른 실근,중근,허근으로 판별시키려고 노력하였다.각 근의 식이 하면서 잘 이해되지 않아서 어려움을 겪었지만 계속 방법을 생각해보고 찾아보며 이해하려고 노력하였다.실행 결과가 만족할 만큼의 결과로 나오지 않은 것 같아 아쉬운 부분이 많았고 중간에 어떻게 고쳐야 할지 고민을 하였지만 끝내 완성되지 못해서 아쉬운 것 같다.

# 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(f'첫번째 근 : {x1}')

print(f'두번째 근 : {x2}')

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

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

print('근이 두개')

if d==0:

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

print(f'근은 {int(x1)}')

print('근이 한개')

if d<0:

print('근이 없음')

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.setheading(90)

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)

xcor=-50

while xcor<=50:

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

pen.goto(xcor,ycor)

pen.pendown()

xcor +=0.5

처음 turtle이라는 그리기 도구를 실행한 후 'import'라는 언어를 사용하여 'math'라는 모듈을 가져온 뒤 a는 이차함수에서 이차항의 계수를 'imput'으로 받은 뒤 'int'로 문자에서 숫자로 변환한 뒤 저장되는 함수이고 b는 일차항의 계수를 저장받고 c는 상수항을 저장받는다.

그리고 d에는 판별식 b**2-4*a*c를 저장하고

만약 입력 받은 수들이 판별식을 거쳤을 때

d가 0보다 크면 근이 두개가 존재하기 때문에

x1에는 첫 번째 근을 저장하고 x2에는 두 번째 근을 저장한 뒤 'print'를 사용하여

첫 번째 근과 두 번째 근을 적은 후 계산 전 식을 적고 근이 두개 인것을 적게 했다.

d가 0과 같았을 때는 근이 한개 존재하므로 그 근을 적고 근이 한개라는 것을 적었다.

d가 0보다 작았을 때는 해가 존재하지 않기 때문에 근이 없다고 적었다.

그 후에 이차식을 이용해 함수를 그릴때는

x축과 y축을 goto를 이용해 그렸고 write를 이용해 x,y,o를 적었고 penup을 통해 펜을 올려 더 이상 그려지지 않게 하고 hideturtle로 숨겼다. 그런 다음 (0,0)으로 옮긴 뒤 펜 사이즈를 1로 정한 뒤 turtle을 xcor과 ycor위치로 옮겨 이차함수를 그리는 프로그램을 만들었다.

# data[].attributes.body
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:

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

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

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

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

import turtle

t=turtle.Turtle()

t.shape('turtle')

def f(x):

return a*(x**2)+b*x+c

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차함수 그래프의 해를 나타내고 그리는 프로그램을 만들려 했는데 그래프가 그려지지 않아서 아쉽다

# data[].attributes.body
#직사각형 그리기

import turtle

t=turtle.Turtle()

t.forward(200)

t.left(90)

t.forward(100)

t.left(90)

t.forward(200)

t.left(90)

t.forward(100)

t.left(90)

t.forward(110)

t.left(90)

#십자가 그리기

t.pencolor('black')

t.fillcolor('green')

t.begin_fill()

t.forward(30)

t.right(90)

t.forward(20)

t.left(90)

t.forward(20)

t.left(90)

t.forward(20)

t.right(90)

t.forward(20)

t.left(90)

t.forward(20)

t.left(90)

t.forward(20)

t.right(90)

t.forward(20)

t.left(90)

t.forward(20)

t.left(90)

t.forward(20)

t.right(90)

t.forward(20)

t.left(90)

t.forward(20)

t.right(90)

t.end_fill()

간호사 하면 떠오르는 모양인 십자가를 코딩을 이용해 표현했다. 직사각형을 그릴때 t.forward 와 t. left를 이용해 코딩을 작성했다. 십자가를 그릴때 방향을 설정할때 각도는 90으로 설정하였고 전진을 할때 20으로 설정해 십자가를 표현했다. 십자가를 색칠할 때 begin 과 endfmf 사용해 색을 입혔다. 겉으로 보기에는 단순하지만 방향을 전환하는 부분이 많아 숫자를 설정하는 부분이 어렵게 느꼈다. 나와 관련한 진로로 코딩을 작성하여 재미있었고 문제를 해결했을때 희열이 컸다.

# data[].attributes.body
import turtle as t

t.pencolor('black')

t.fillcolor('yellow')

t.begin_fill()

t.forward(40)

t.left(90)

t.forward(15)

t.left(90)

t.forward(40)

t.right(90)

t.forward(40)

t.left(90)

t.forward(20)

t.left(90)

t.forward(40)

t.right(90)

t.forward(40)

t.left(90)

t.forward(15)

t.left(90)

t.forward(40)

t.right(90)

t.forward(160)

t.left(45)

t.forward(15)

t.left(90)

t.forward(15)

t.left(45)

t.forward(160)

t.fillcolor(yellow)

t.end_fill()

많이 그려지고 사용되는 십자가 모양을 골라 연습해보았다. 그림은 생각보다 단순해 보이지만 방향 전환이 많고 가는 거리까지 일정하게 유지하는 걸 해보니 의외로 복잡했다. 방향 전환은 모두 왼쪽으로 가도록 해 헷갈리지 않도록 하려했지만 그려지는 선이 많아 생각했던 초반보다 조금 완성도가 떨어지는 것 같지만 그래도 십자가 모양은 완성하였다.

# data[].attributes.body
2명에서 할수 있는 탁구게임 프로그램

turtle과 random 을 import 로 불러온다.

turtle을 이용해서 시작하면 경기장과 공,채 를 그린다.

채는 turtle 내에 onkeypress 를 이용해 특정 키가 눌렸을때 이동되게 한다.

키보드의 w와s키로 왼쪽채를,

키패드의 8번과 2번키로 오른쪽 채를 움직인다.

공은 위 아래 벽에 닿았을때 튕겨난다

이 부분은 조건문으로 공의 위치가 벽의 좌표와 가까워지면 공의 방향을 반대로 바꾸어 제작했다.

또한 공이 채에 닿았을때 반대로 튕겨나가는데 이때 공의 각도가 바뀌는 것은 random.randrange(x,y)***x<=랜덤한 숫자<y

를 사용해 랜덤하게 각도가 변경되게 했다.

공이 좌 우 의 벽을 넘어갔을때 넘어간 벽의 위치에 따라

1번플레이어와 2번플레이어에게 알맞게 점수가 부여되며

이는 turtle 의 write 기능에 함수를 더하며 만들었다.

줄 수는 134줄이다

import turtle

import random

count=1

s=turtle.Screen()

s.screensize(1280,720,'white')

ball=turtle.Turtle()

ball.shape('circle')

ball.speed(0)

ball.penup()

ball.goto(0,0)

p1=turtle.Turtle()

p1.seth(90)

p1.shape('square')

p1.shapesize(1,5)

p1.color('black')

p1.speed(10)

p1.penup()

p1.setx(-620)

p2=turtle.Turtle()

p2.seth(90)

p2.shape('square')

p2.shapesize(1,5)

p2.color('black')

p2.speed(0)

p2.penup()

p2.setx(620)

barL=turtle.Turtle()

barL.shape('square')

barL.shapesize(36,1)

barL.color('blue')

barL.penup()

barL.setx(-640)

barR=turtle.Turtle()

barR.shape('square')

barR.shapesize(36,1)

barR.color('blue')

barR.penup()

barR.setx(640)

barU=turtle.Turtle()

barU.shape('square')

barU.shapesize(1,64)

barU.color('blue')

barU.sety(360)

barD=turtle.Turtle()

barD.shape('square')

barD.shapesize(1,64)

barD.color('blue')

barD.sety(-360)

n1=0

n2=0

score=turtle.Turtle()

score.speed(0)

score.hideturtle()

score.penup()

score.color('black')

score.goto(-620,290)

score.write(f'{n1} : {n2}',font=('arial',40,'bold'))

def f1up():

if p1.ycor()<=290:

if ball.xcor()<0:

p1.forward(10)

def f1dn():

if -290<=p1.ycor():

if ball.xcor()<0:

p1.back(10)

def f2up():

if p2.ycor()<=290:

if ball.xcor()>0:

p2.forward(10)

def f2dn():

if -290<=p2.ycor():

if ball.xcor()>0:

p2.back(10)

bx=15

by=6

while True:

s.update()

ball.setx(ball.xcor()+bx)

ball.sety(ball.ycor()+by)

if ball.xcor()<0:

s.onkeypress(f1up, 'w')

s.onkeypress(f1dn, 's')

p1.color('black')

p2.color('gray')

elif ball.xcor()>0:

s.onkeypress(f2up, '8')

s.onkeypress(f2dn, '2')

p2.color('black')

p1.color('gray')

s.listen()

if not -340<ball.ycor()<340 :

by=by*-1

if count==1:

if -620<ball.xcor()<-600:

if p1.ycor()-40<=ball.ycor()<=p1.ycor()+40:

bx=bx*-1

by=random.randrange(2,19)*(by/abs(by))

if 600<ball.xcor()<620:

if p2.ycor()-40<=ball.ycor()<=p2.ycor()+40:

bx=bx*-1

by=random.randrange(2,19)*(by/abs(by))

count=0

count=1

if ball.xcor()>620:

n1=n1+1

score.clear()

score.write(f'{n1} : {n2}',font=('arial',40,'bold'))

ball.speed(10)

ball.goto(0,0)

if ball.xcor()<-620:

n2=n2+1

score.clear()

score.write(f'{n1} : {n2}',font=('arial',40,'bold'))

ball.speed(10)

ball.goto(0,0)

ball.speed(0)

s.update()

s.mainloop()

# data[].attributes.body
https://youtu.be/zP-Sx_FglVw

먼저 키 권한이 스왑되지 않는 버그 수정,

명령문 조건 때문에 채에서 머물다가 나가는 버그를 횟수에 제한으로 수정,

중간부터 실행이 멈추는 버그 수정

여러 기물?들의 유격을 맞추는데에 어려움이 있었음

만드는데 5시간 걸렸음

터틀이 작동 했다가 안했다가 해서 난관을 조금 겪음

(숫자만 조금 바꿨다고 갑자기 이상하게 실행됨)

그치만 재미있고 보람참