Courses/Computer Science/CPSC 203/CPSC 203 Template/Fall 2009 Teaching Assistants/F09 Thomas Burt/Lab 3.3

Introduction
Today's tutorial builds on the programming fundamentals covered in the last two tutorials. After completing this module, you should be comfortable in demonstrating the the following skills:
 * using functions

Additional Reading
Examples 1, 2, and 3 come from the lecture notes of Dr. Jalal Kawash

Functions
Jython uses the def statement to define functions. Functions related statements include:

def, return

The def statement creates a function object and assigns it to a name. The return statement sends a result object back to the caller. This is optional, and if it is not present, a function exits so that control flow falls off the end of the function body.

global

The global statement declares module-level variables that are to be assigned. By default, all names assigned in a function are local to that function and exist only while the function runs. To assign a name in the enclosing module, list functions in a global statement.

The basic syntax to define a function is the following:

def name (arg1, arg2, ... ArgN) statements return value

where name is the name of the function being defined. It is followed by an open parenthesis, a close parenthesis and a colon. The arguments inside parenthesis include a list of parameters to the procedures. The next line after the colon is the body of the function - a group of commands that form the body of the function. After you define a Jython function, it is used just like any of the built-in functions. For example: def add(number1, number2): answer = number1 + number2 return answer To call the function above, use the following commands:

x = 1 y = 2 add(x, y) => 3 Example 1: Receives a numerical grade as input from the user, and outputs the equivalent numerical grade.

def grades: strInput = raw_input('Enter your grade: ') grade = int(strInput) print 'grade is', grade if grade >= 90 and grade < 100: print 'A' elif grade >=80: print 'B' elif grade >= 70: print 'C' elif grade >=60: print 'D' else: print 'F' Example 2: Finds the minimum element in a list of elements def empty(S): return len(S) == 0

def min(S): if empty(S): return 'undefined' else: min_so_far = S[0] for i in range(1,len(S)): if S[i] < min_so_far: min_so_far = S[i] return min_so_far Example 3: Sorts a list of numbers using the selection sort algorithm def selectionSort(S): sortedS = [] for i in range(0,len(S)): minElement = min(S) S.remove(minElement) sortedS.append(minElement) return sortedS

Drawing on Images
Lets start by making a red dot on a blank picture.

def makePic: # Make a new picture newPic = makeEmptyPicture(200, 100) # Get a pixel from the middle of it  pixel = getPixel(newPic, 100, 50) # Make that pixel red setColor(pixel, red) # Display the result show(newPic)

This is nice, but drawing a single pixel at a time is gonna be a little tedious. We can also draw lines, rectangles, ovals, and text. def makePic: # Make a new picture newPic = makeEmptyPicture(200, 100) # Make a red line running from upper-left to lower-right newPic.addLine(red, 0, 0, 200, 100) # Display the result show(newPic) The function addLine takes a color and four coordinates x1, y1, x2, y2, and draws a straight line in that color. Note that you call this in a slightly diﬀerent way than the other functions we’ve seen so far. Don’t worry about the difference for now.

The function addRect takes a color and four integers x, y, width, and height. It draws a rectangle of the given width and height with the position (x, y) as the upper left corner (see the "discussion" tab).

def myFunction: # Make a new picture newPic = makeEmptyPicture(200, 100) # Make a blue 30x30 square whose upper-left corner is at 10, 20 newPic.addRect(blue, 10, 20, 30, 30) show(newPic)

The function addOval takes a color and four integers x, y, width, and height. It draws an oval whose left edge touches x, whose top edge touches y, and with the given width and height. To make a circle, just make width and height equal.

newPic.addOval(red, 80, 80, 20, 10)
 * 1) Make a red oval centered at 80, 80

The function makeColor takes three integers red, green, and blue, and returns a new color. This way you can make your own colors if you know their red, green, and blue intensities! (0, 0, 0) is black, (255, 255, 255) is white, and (255, 0, 0) is red. (Note: you can also pick a color using the pickAColor function.)

pukeColor = makeColor(196, 181, 84)
 * 1) Make a new color of mostly red and green, with a little blue

The function addText takes a color, two coordinates x and y, and a string. It then writes that string starting at those coordinates in that color. newPic.addText(pukeColor, 30, 80, "Hello world!")
 * 1) Print a friendly message in that new color

When you are done, you need to send the picture from the computer's memory to the screen. show(newPic)
 * 1) Display the results

You can also save images if you want to. The function writePictureTo takes a picture and a ﬁlename and writes the picture to that ﬁle. Be sure to include the extension “.jpg” so that other programs can recognize the ﬁle type. writePictureTo(newPic, "test.jpg")
 * 1) Save the results to a new file

Smiley
This function draws a semi-surprised smiley face def makeSmiley: pic = makeEmptyPicture(500,500) #face pic.addOvalFilled( yellow, 75,75, 350, 350) #eyes pic.addOvalFilled( black, 175, 175, 30, 30) pic.addOvalFilled( black, 275, 175, 30, 30) #mouth pic.addOvalFilled( black, 225, 375, 60, 30) show(pic)

For more surprise, change the last lines: #mouth pic.addOvalFilled( black, 225, 340, 40, 70)