Graded Homework 4

**Grade: 4.5/5**

Great work, Charlie! One big comment for your `evaluate_random_function`. Use `elif` statements since all these cases are related to each other. Python interprets each of your `if` statements as a new block of `if` statements. If you did something like this:
```
res = None      # initialize a res variable
# pattern matching
if f[0] == 'x': 
    res = x
if f[0] == 'y':
    res = y
...
return res
```
then Python will go ahead and implement each of your `if` statements even though it's found a match and set a value for `res`. If you use `elif`, Python will break out of the your `if...elif...else` statements once it finds a match.

Once you've read the comments (both on the PR and under files changed), make a comment to the pull request or send me/Diana an email, letting us know that you've checked them out. Afterwards, close the PR (and optionally delete the graded branch)

#### REMEMBER NOT TO MERGE THESE PRs!