61A Homework 1

Due by Noon on Friday, 9/2

This homework must be submitted online and on paper. Paper submissions should be placed in the box for your TA in Soda 283. Online submissions should be done in a single file named "hw1.py" (it must be that we can import hw1 when we run an interpreter once we have your file).

Readings. All problems in this homework can be solved with the subset of Python 3 introduced in sections 1.2-1.5 of the lecture notes.

Q1. Recall that we can assign new names to existing functions. Fill in the following function definition for adding a to the absolute value of b, without calling abs:

from operator import add, sub
def a_plus_abs_b(a, b):
    """Return a+abs(b), but without calling abs."""
    if ____:
        op = ____
        op = ____
    return op(a, b)

Q2. Write a function that takes three positive numbers and returns the sum of the squares of the two larger numbers. Use only a single expression for the body of the function.

Q3. Let's try to write a function that does the same thing as an if statement:

def if_function(condition, true_result, false_result):
    """Return true_result if condition is a true value, and false_result otherwise."""
    if condition:
        return true_result
        return false_result

This function actually doesn't do the same thing as an if statement in all cases. To prove this fact, write functions c, t, and f such that one of these functions returns the number 1, but the other does not:

def with_if_statement():
    if c():
        return t()
        return f()

def with_if_function():
    return if_function(c(), t(), f())

Q4. Douglas Hofstadter’s Pulitzer-prize-winning book, Gödel, Escher, Bach, poses the following mathematical puzzle.

  1. Pick a positive number n
  2. If n is even, divide it by 2.
  3. If n is odd, multipy it by 3 and add 1.
  4. Continue this process until n is 1.

The number n will travel up and down but eventually end at 1 (at least for all numbers that have ever been tried -- nobody has ever proved that the sequence will terminate).

The sequence of values of n is often called a Hailstone sequence, because hailstones also travel up and down in the atmosphere before falling to earth. Write a function that takes a single argument with formal parameter name n, prints out the hailstone sequence starting at n, and returns the number of steps in the sequence.

Hailstone sequences can get quite long! Try 27. What's the longest you can find?

Update: This question was corrected on 8/27 to read "a positive number n."