```
WEEK05: functions
---------------------------------------------------------------
F: more functions...changing items in a list

HANDOUT: functionWorksheet.py

- take 5 minutes and write down what you think the output of
the program will be (work with your neighbor if you want)

#
#  what is the output of this program???
#  (what will it print to the screen?)
#
# ------------------------------------------------------ #
def forceInRange(alist, low, high):
for i in range(len(alist)):
if alist[i] < low:
alist[i] = low
elif alist[i] > high:
alist[i] = high
# ------------------------------------------------------ #
def lowercase(text):
lowtext = ""
for ch in text:
if ch.isupper():
ch = ch.lower()
lowtext += ch
text = lowtext
# ------------------------------------------------------ #
def printdivider(ch):
print 50*ch
# ------------------------------------------------------ #
def oddfunction():
for i in range(1000):
print "low = %d    high = %d " % (low, high)
# ------------------------------------------------------ #
def main():
printdivider("!")
reds = [22,-1,103,93,250,273,298,37]
low = 0
high = 255
forceInRange(reds, low, high)
print "back in main...reds = ", reds

returnvalue = printdivider(":")
print "returnvalue = ", returnvalue
returnvalue = printdivider(":")

text = "we LOVE comp sci!!"
lowercase(text)
print "back in main...text = ", text
printdivider("!")
oddfunction()
# ------------------------------------------------------ #
main()

- Let's work through this, writing out what the stack would
look like as the program runs

- here's forceInRange():

def forceInRange(alist, low, high):
for i in range(len(alist)):
if alist[i] < low:
alist[i] = low
elif alist[i] > high:
alist[i] = high

- here's a picture of the stack when forceInRange() is executing:

stack
|              |
|              |
----------------
|forceInRange()|
|              |
|  high ------------------------------------------------
|  low -------------------------------------------      |
|  alist -------------                            |     |
|              |     |                            |     |
|              |     |                            |     |
----------------     |                            |     |
|main()        |     |                            |     |
|              |     |                            |     |
|              |     V                            |     |
|  reds --------> [22,-1,103,93,250,273,298,37]   V     |
|  low -----------------------------------------> 0     V
|  high ---------------------------------------------> 255
|              |
|              |
|              |
----------------

- notice that alist and reds point to the same list, so assigning
a new value to alist[i] changes reds, too!!!!

SCOPE:
- where in a program a given variable may be referenced or used
- the variables in any function are **local** to that function,
and do not exist outside of the function!!

UPDATE21:

- run update21 to get a copy of the functionWorksheet.py program
- run the program and make sure you understand what happens and why
- copy the program to http://www.pythontutor.com and run it!

- write a drawGhost() function to be called from main like this:

ghost = drawGhost(gw,p,size)

it should draw a ghost to the given graphics window, at point
p, with the given size

___
/   \
/ o o \
|     |
|   O |  Boo!
|     |
|     |

```