2. Writing Fruitful Functions Practice

Quick Overview of Day

Warmup drawing problem. WDTPD questions about functions. Students practice writing fruitful functions.

  • CS20-CP1 Apply various problem-solving strategies to solve programming problems throughout Computer Science 20.
  • CS20-FP1 Utilize different data types, including integer, floating point, Boolean and string, to solve programming problems.
  • CS20-FP2 Investigate how control structures affect program flow.
  • CS20-FP3 Construct and utilize functions to create reusable pieces of code.

2.1. Warmup Problem

../../_images/confusion-25.png

Draw the image above using the Python turtle module. You must define a function as part of your solution!

2.2. What Does This Program Do?

Remember that variables created inside of a function have local scope (can only be used inside that function), whereas variables created outside of a function have global scope (can be accessed from anywhere).

Note

Your teacher may choose to use the following examples as a class activity, by displaying the examples, and having you take a guess as to what you think each will do before running the code.

What will the following programs output? Why?

2.3. Practice Problems

Try the following practice problems to be sure you understand how to create fruitful functions. Your functions have to return the correct value – using print() will not work. When you run your code for these questions, your code will automatically be checked with a number of test cases to see if your function works in all situations. You will be able to see any situations in which your function does not provide the correct answer.

Note

The only thing you need to do for the following is to complete the function definition! You do not need to call the function, as that will be done automatically for you.

2.3.1. Area of rectangle

The parameters length and width represent the lengths of the sides of a rectangle. Calculate the area of the rectangle with the given values, and return the result.

Examples:

rectangle_area(5, 10) 50

rectangle_area(1, 10) 10

rectangle_area(2, 6) 12

2.3.2. Letter Grade

Write a function that returns the letter grade, given an exam mark as the parameter. The grading scheme is:

Letter Grade Interval
A >= 90
B [80, 90)
C [70, 80)
D [60, 70)
F < 60

The square and round brackets denote closed and open intervals. A closed interval includes the number, and open interval excludes it. So 79.99999 gets grade C, but 80 gets grade B.

Examples:

letter_grade(83) "B"

letter_grade(73) "C"

letter_grade(80) "B"

2.3.3. Find the Smallest

The function find_min(a, b, c) will take three numbers as parameters and return the smallest value. If more than one number is tied for the smallest, still return that smallest number. Note that you cannot use the min function in this solution.

Examples:

find_min(4, 7, 5) 4

find_min(4, 5, 5) 4

find_min(4, -7, 5) -7

2.3.4. Is Even

The function is_even(number) will return True if the number passed in is even, and False if it is odd. Hint: You might want to look back at the Math Operators list.

Examples:

is_even(4) True

is_even(-4) True

is_even(5) False

2.3.5. Leap Year

A year is a leap year if it is divisible by 4 unless it is a century that is not divisible by 400. Write a function that takes a year as a parameter and returns True if the year is a leap year, False otherwise. The following pseudocode determines whether a year is a leap year or a common year in the Gregorian calendar (from Wikipedia):

if (year is not divisible by 4) then (it is a common year)
else if (year is not divisible by 100) then (it is a leap year)
else if (year is not divisible by 400) then (it is a common year)
else (it is a leap year)

Examples:

leap_year(2001) False

leap_year(2020) True

leap_year(1900) False

2.3.6. Using Your Is Even Function

Write a program that continues to take in a number from the user until the number given is NOT even. For example, the user might enter 4, 10, 42, 5. The program would only stop when the non-even number 5 is entered. You need to use the is_even function you defined above.

Next Section - 3. The Accumulator Pattern