$30
1
CIS 122 Project 5–functions
Briefly
Submit four Python 3 programs
Your programs are worth a total of 25 points
Test your programs -- did they work right? -- before uploading to
Canvas.
Your programs should contain code that tests your functions.
P5-function.py
Explore how to call a function of one "argument"
Local variables - the variables created by your function
Are they available to the main program?
P5-utility.py
Some "utility functions" - functions to simplify common
error–prone tasks
Build them, test them, use them in any project from this
point on.
Also functions to simplify your turtle graphics.
jump(distance ) # for example
P5-display.py
Add some functions to simplify pleasant display of
numbers and text. Without these functions:
6 John 6783.2
19 Joan 7624.95
216 Jo 13432.57
Using the functions you get instead:
6 John 6,783.20
19 Joan 7,624.95
216 Jo 13,432.57
P5-convert.py
Convert dollars to euros, euros to dollars.
Convert temperatures in degrees Celsius to degrees
Fahrenheit, and degrees F to degrees C.
Project5-functions.py 5 points:
Learning objective
Practice making your own functions.
Work with local variables (variables created within a function).
Are those local variables available to your main program?
What happens if a main program has a variable with the same
name as a variable in your function? Is that legal? Does it cause
problems?
Look at a little function (items in blue are required)
def xray(volts): # Define function xray
""" Returns volts * dirac_number
"""
dirac_number = 137.00006
result = volts * dirac_number
return result
# Call the function
z = 22
gestalt = xray(z) # Python copies argument
# volts = z
bongo = 3
chorus = xray(bongo) # copies volts = bongo
Short functions
easy to understand
easy to test
easy to re–use
Short functions
do just one thing
Avoid "Swiss Army Knife" functions
that do many things
Define first, then call
Define once, call many times
Like a recipe for apple pie; you can use the recipe to bake a pie;
then later, use the same recipe to bake another pie.
2
5 points for P5-function.py
Define an ask_for_int(hint) function, test features of functions
It asks for input from user using the hint, converts input string to
int and returns the int value.
2 points define and test ask_for_int function
def ask_for_int(hint):
""" Return int value of calling input"""
temp = input(hint)
value = int(temp)
return value
# test ask_for_int
height_hint = "Type your height in inches "
height = ask_for_int(height_hint)
print("Height", height, "inches")
1 point
What happens if you try to print value ?
# print a description such as
print("Trying to print value gets an error") or
print("Trying to print value shows value from the ask_for_int")
Comment out the call to print(value) if it caused an error.
2 points
When both your main program and your function assign a value to
a variable name, does the function change the value of a variable
in your main program?
temp = 27
print("temp", temp)
hint2 = "Lucky number (1-10): "
lucky = ask_for_int(hint2)
print("temp", temp)
Did the call to the function change temp?
print("temp was changed / unchanged by call to ask_for_int")
Since Python copies each argument such as height_hint to the
names between ( ) in the function def
hint = height_hint
you can use any name you want to when calling
ask_for_int
def ask_for_int(hint):
""" Return int value of calling input"""
temp = input(hint)
value = int(temp)
return value
Here hint, temp and value are all local variables
defined only while the function is running.
3
P5-utility.py 5 points
Some "utility functions" - functions to simplify common
error–prone tasks
Build them, test them, use them in any project from this
point on.
Also functions to simplify your turtle graphics.
draw_triangle(size ) # for example
0 point (you already have this)
def ask_for_int(hint):
Displays hint, returns input from user
converted to int (whole number)
1 point
def ask_for_float(hint):
Displays hint, returns input from user
converted to float (decimal number)
1 point
def ask_for_str(hint):
Displays hint, returns string input from user
1 point bonus
Each of the "ask_for" functions makes sure hint ends
in a blank.
1 point
def make_money(amount):
Accepts numeric amount and returns amount rounded
to 2 decimal places.
1 point
def jump(distance):
Move turtle forward without leaving a mark.
Turtle should be set to mark after leaving the function.
1 point
def jump_to(x,y):
Move turtle to location (x,y) without leaving a mark.
Turtle should be set to mark after leaving the function.
Hint: t.goto(x, y) will be useful here.
Your main program should call each of these functions at least
once, somewhat like this (with user typing shown in blue)
Enter number 7
You entered 7, next number is 8
Enter a decimal number with 3 decimals 6.789
Type your first name: Morgan
Convert the decimal number to money with your make_money
function.
Morgan -- money value of 6.789 is 6.79
P5-display.py 6 points
Functions to make nice reports that let data line up in readable
columns.
A few items to note.
x = 12345
show_x = format(x, '8,d')
#' 12,345' # show_x is a string length 8
# ========
money = 123456.78
show_money = format(money, '12,.2f')
To form a string like '12,.2f' given width w and decimals d
my_format = str(w) + ",." +str(d) + "f"
show_money = format(money, my_format)
2 points
def nice_int(number, width):
Returns a string showing number value with commas
that fits in an area of width spaces
Example
show_number = nice_int(3025, 6)
returns ' 3,025'
2 points
def nice_float(number, width, decimals):
Returns a string show a number value with commas
that fits in an area of width spaces a decimal point
and requested number of decimals.
Example
sales = 13034.76
show_sales = nice_float(sales,12,2)
returns ' 13,034.76'
1 points
To left justify a string s in a field of width w, your function can do
this
show_str = s.ljust(w) # l as in "left"
def nice_left_str(string, width):
Returns a string left justified in a string of width
characters, padded on right with blanks.
Example
state = "Oregon"
show_state = nice_left_str(state, 16)
returns 'Oregon '
state = "Mississippi"
show_state = nice_left_str(state, 16)
returns 'Mississippi '
Taken together, these allow nice looking reports:
Instead of
2 Oregon 2475 45678.0
12 Utah 3450 12956.2
48 North Carolina 178 4567.33
You get something like this
2 Oregon 2,475 45,678.00
12 Utah 3,450 12,956.20
48 North Carolina 178 4,567.33
1 point Print a similar short report lining up strings and numbers
4
P5-convert.py 9 points
For the next two functions assume a conversion rate for euros and
dollars
rate = 1.09 dollars per 1.00 euros
If you have e euros mulitply by 1.09 dollars
_____________
1.00 euros
If you have d dollars mulitply by 1.00 euros
_____________
1.09 dollars
Notice how euros cancel out in the first formula; dollars cancel out
in the 2nd formula.
2 points
def euros_to_dollars(euros):
# put code here to convert to dollars
return dollars
2 points
def dollars_to_euros(dollars):
# put code here to convert to euros
return euros
1 point
Call your functions to test your formulas.
Roughly, 13 dollars gets a little more than 10 euros.
Roughly, 10 euros gives a little more than 12 dollars.
Temperature facts
Freeze ice 0 C == 32 F
Boil water 100 C == 212 F
Difference 100 C 180 F
If you have c degrees C multiply by 180F
______
100C
The C's cancel out leaving F degrees above freezing,
then add the F freezing temperature + 32 F
2 points
def fahr_to_celsius(f_temp):
# put code here to convert to c_temp
return c_temp
If you have f degrees:
Start by getting the F temps to a same starting point as Celsius
Subtract 32 F from the f degrees
Then convert F degrees above freezing to C degrees above freezing
f degrees F above freezing multiply by 100C
______
180F
The F's cancel out leaving C degrees above freezing,
2 points
def fahr_to_celsius(f_temp):
# put code here to convert to c_temp
return c_temp
Test your functions.
0 C should give 32 F
32F should give 0 C
100 C should give 212 F
212 F should give 100 C