Today's lab will focus on designing programs using functions.
In today's lab, we will write a program to draw images using turtles. Many of the functions we write today will be reused in future programs. Here's a basic outline of our program:
#Intro Programming Lab: A program with a herd of turtles
import turtle
def main():
welcomeMessage() #Writes a welcome message to the shell
numTurtles = getInput() #Ask for number of turles
w = setUpScreen() #Set up a green turtle window
turtleList = setUpTurtles(numTurtles) #Make a list of turtles, different colors
for i in range(10):
moveForward(turtleList) #Move each turtle in the list forward
stamp(turtleList) #Stamp where the turtle stopped
main()
We will fill in each function, one-by-one, using the comments as guidance.
The first function should welcome the user to the program:
def welcomeMessage():
print()
print("Welcome to our herd of turtles demonstration!")
print()
Add it to the program above and run it to make sure there are no typos or
errors.
Next, let's ask the user for the number of turtles. Since the function call is on the right hand side of an equals sign, it returns a value (namely, the number of turtles) that we will use later in the program. So, our function will ask the user for the number and then use a return statement to send that value back to the calling function:
def getInput():
n = eval(input("Please enter the number of turtles: "))
return n
When we add these in, we now have the program:
#Intro Programming Lab: A program with herd of turtles
import turtle
def welcomeMessage():
print()
print("Welcome to our herd of turtles demonstration!")
print()
def getInput():
n = eval(input("Please enter the number of turtles: "))
return n
def main():
welcomeMessage() #Writes a welcome message to the shell
numTurtles = getInput() #Ask for number of turles
w = setUpScreen() #Set up a green turtle window
turtleList = setUpTurtles(numTurtles) #Make a list of turtles, different colors
for i in range(10):
moveForward(turtleList) #Move each turtle in the list forward
stamp(turtleList) #Stamp where the turtle stopped
main()
We still need to set up the turtle window and make it green. The
turtle command to change the background color is bgcolor and
colors can be referred by their names or the percentage of red, green,
and blue ('RGB') in the color. Let's use the name to change the window
color:
def setUpScreen():
w = turtle.Screen()
w.bgcolor("green")
return w
Next, we need to set up a list of turtles. From the function invocation in the
main() we know it has the outline:
def setUpTurtles(n):
#Create a list of turtles
#Make each turtle appear turtle-shaped
#Change the color and default direction (so they don't run over each other)
return tList
To set up our list, we will follow our outline from the strings and lists chapter:
def setUpTurtles(n):
tList = []
#Create turtles:
for i in range(n):
t = turtle.Turtle()
t.shape("turtle") #Make the turtle appear turtle-shaped
tList.append(t)
return tList
Lastly for this function, we need to change the color and direction. We will use
the `red-blue-green' (`RGB') values to give each turtle a different color. To keep
the turtle color from clashing with the green background, we will set the red and
green parts of the color to 0, and just allow the blue to change from 50% to 100%.
To spread the turtles out, we'll divide the circle into even angles:
def setUpTurtles(n):
tList = []
#Create turtles:
for i in range(n):
t = turtle.Turtle()
t.shape("turtle") #Make the turtle appear turtle-shaped
tList.append(t)
#Change their color from the blue default and default direction
for i in range(n):
tList[i].color(0,0,i/(2*n)+.5)
tList[i].right(i*360/n)
return tList
If you run your program, you will see the turtles arranged pointing outwards from
a center point, in different shapes of blue.
The next functions of the program are straightforward. We will move each turtle forward using a for-loop. We chose 30 by experimenting with window size. If it does not fit well on your screen, change the forward distance to something that does. To make a stamp of where the turtle has been, we use the Turtle graphics function, stamp()
def moveForward(tList):
for t in tList:
t.forward(30)
def stamp(tList):
for t in tList:
t.stamp()
Putting all the pieces together, we get:
#Intro Programming Lab: A program with herd of turtles
import turtle
def welcomeMessage():
print()
print("Welcome to our herd of turtles demonstration!")
print()
def getInput():
n = eval(input("Please enter the number of turtles: "))
return n
def setUpScreen():
w = turtle.Screen()
w.bgcolor("green")
return w
def setUpTurtles(n):
tList = []
#Create turtles:
for i in range(n):
t = turtle.Turtle()
t.shape("turtle") #Make the turtle appear turtle-shaped
tList.append(t)
#Change their color from the blue default and default direction
for i in range(n):
tList[i].color(0,0,i/(2*n)+.5)
tList[i].right(i*360/n)
return tList
def moveForward(tList):
for t in tList:
t.forward(30)
def stamp(tList):
for t in tList:
t.stamp()
def main():
welcomeMessage() #Writes a welcome message to the shell
numTurtles = getInput() #Ask for number of turles
w = setUpScreen() #Set up a green turtle window
turtleList = setUpTurtles(numTurtles) #Make a list of turtles, different colors
for i in range(10):
moveForward(turtleList) #Move each turtle in the list forward
stamp(turtleList) #Stamp where the turtle stopped
main()
Try running your program. What happens? How could you modify it to make green
turtles on a blue background? What would you need to modify to make the turtles
make a circle each time?