A good example of how to use functions is a the following modified version of assignment 2.

```
import sys
#define the variable I will use throughout the program
xcenter = 400
ycenter = 300
scale = 30
#convert an x value from cartesian coordinates to screen coordinates
def cartx(x):
x = scale * x
x = xcenter + x
return x
#convert an x value from cartesian coordinates to screen coordinates
def carty(y):
y = scale * y
y = ycenter - y
return y
#find the y value for the given a,b,c,d and x values
def formula(a,b,c,d,x):
y = a*x**3 + b*x**2 + c*x + d
return y
#Draw the curve defined by a,b,c and d from a beginning cartesian value to an end cartesian value
#approximating by delta cartesian units
def draw(a,b,c,d,begin,end,delta):
x = begin
while x < end:
y = formula(a,b,c,d,x)
y2 = formula(a,b,c,d,x+delta)
print "line",cartx(x),carty(y),cartx(x+delta),carty(y2)
x = x + delta
sys.stdout.flush()
#Draw Axes through the center
print "line",xcenter,0,xcenter,ycenter*2
print "line",0,ycenter,xcenter*2,ycenter
#label X axis
i = 13
while(i > 0):
print "line",cartx(i),carty(0.25),cartx(i),carty(-0.25)
print "line",cartx(-1*i),carty(0.25),cartx(-1*i),carty(-0.25)
print "text",i,cartx(i),carty(-0.75),"label" + str(i),"center"
print "text",-1*i,cartx(-1*i),carty(-0.75),"label" + str(-1*i),"center"
i -= 1
#label Y axis
i = 10
while(i > 0):
print "line",cartx(-.25),carty(i),cartx(.25),carty(i)
print "line",cartx(-.25),carty(-1*i),cartx(.25),carty(-1*i)
print "text",i,cartx(-1),carty(i-0.25)
print "text",-1*i,cartx(-1),carty(-1*i-0.25)
i -= 1
#Assume we want the program to run the first time
answer = "yes"
#While the user wants to draw a curve
while answer == "yes":
#Get a,b,c,d from user
sys.stderr.write("input a:")
a = input() # 0.0
sys.stderr.write("input b:")
b = input() # -0.1
sys.stderr.write("input c:")
c = input() # 0.0
sys.stderr.write("input d:")
d = input() #8.0
#Where do we want our curve to start and end, how much do we want it to go up by
begin = -14
end = 14
delta = 0.1
#Draw Curve
draw(a,b,c,d,begin,end,delta)
#Ask if the user would like to draw another curve
sys.stderr.write("Would you like to draw another? ")
answer = raw_input()
sys.stdout.flush()
```

In this example, we created a few helper functions, like the ones below to convert values between cartesian values and screen coordinates

```
#convert an x value from cartesian coordinates to screen coordinates
def cartx(x):
x = scale * x
x = xcenter + x
return x
#convert an x value from cartesian coordinates to screen coordinates
#
def carty(y):
y = scale * y
y = ycenter - y
return y`
```

The core of the program, that is, the drawing of the curve was also done using functions, as seen here

```
#Draw the curve defined by a,b,c and d from a beginning cartesian value to an end
cartesian value
#approximating by delta cartesian units
#
def draw(a,b,c,d,begin,end,delta):
x = begin
while x < end:
y = formula(a,b,c,d,x)
y2 = formula(a,b,c,d,x+delta)
print "line",cartx(x),carty(y),cartx(x+delta),carty(y2)
x = x + delta
sys.stdout.flush()`
```