Name: ______K E Y_______
Student ID: __________________

Total points: 115
  1. Name the five steps to top-down
    problem solving as described in the text.
    (It's okay if you can't remember the exact wording; the concepts are more important.) [5]

    Write______ Apprehend__ Design_____ Execute____ Scrutinize_
  2. Fill in the blank: [22]
    1. "Computers are tools, and computing scientists are toolsmiths."
    2. How many bits are in a nibble? 4
    3. 1011 0110 shifted two right, in binary, is 101101
    4. Convert 0x1BE to decimal: 446
    5. Convert 1100 0110 from binary to octal: 0306
    6. What word describes functions which invoke themselves? recursion
    7. The Python command used to trigger a user-defined exception is raise
    8. False : The word Apples_For_Dr.Ho is a legal Python identifier.
    9. What is the type of the Python expression 5**2 ? int
    10. What Python command is used to convert an integer into a real value? float()
    11. Name the two optional reserved words used in the Python program control construct which corresponds to selection: elif, else
    12. The first assignment of a value to a variable is called initializing it.
    13. A cable modem connection runs at 4Mb/s. Assuming full utilization of the bandwidth (which never happens in reality), how long would it take to download a 2GB file? Use binary units. 4096 seconds
    14. The standard Python function which produces a pseudorandom real number between 0 and 1 is in the
      random standard library and is named random().
    15. The Python function which counts the number of characters in a string is named len().
    16. What English part of speech should a function name be? verb
    17. What symbol is used to separate statements in a sequence in C or M2? ; (semicolon)
    18. What symbol is used to indicate logical negation in Python? not
    19. A requirement imposed by a function upon its parameters, such that the correctness of the result is not guaranteed if the requirement is not met, is called a precondition
  3. Name the five computer program flow abstractions described in the text, and for the four which we covered in class, show how each is done in Python. [9]
    • Sequence: newline
    • Selection: if/elif/else
    • Repetition: while/for
    • Composition: def (functions)
    • Parallelism
  4. Evaluate each of the following Python expressions exactly as given, or if it produces an error, describe the error. Assume each expression is independent of the others. Assume all necessary imports have been done. For all expressions, assume the following initialization: [14]
    	myPear = "DAnjou"
    	from math import pi	
    1. 'pi' + 2*'z' + 'a' 'pizza'
    2. 2 + 1>4 and (5/0 < 1) False
    3. 2.0 + 14 / 4 5.0
    4. 6 ^ 5 3
    5. "%03d%s" % (15.189, 'pears') '015pears'
    6. string.upper(DAnjou) NameError: DAnjou
    7. "%05.2f" % 2.7182818 '02.72'
    8. '%.2f' % (19 % 5) '4.00'
    9. range(myPear) TypeError
    10. myPear[1:4] 'Anj'
    11. 'd' + 'b' 'db'
    12. ord('d') - ord('b') 2
    13. 'd' - 'b' TypeError
    14. 'b' + 3 == 'd' TypeError

  5. What is a namespace? Tell me everything you know about scope rules and namespaces in Python. [5]
    A namespace is a mapping (dictionary) from identifiers (names) to objects (values). There are three kinds of namespaces: the local namespace within a function/class/block, the global namespace for each module/file, and the default built-in namespace for all of Python. The scoping rules resolve names by moving outward from the local namespace, to any enclosing function/class definitions, to the global namespace for the file, to the default namespace.
  6. An orchard grows five apple varieties:
    Fuji, Gala, Spartan, Rome, and Melba.
    The apples I like are Fuji, Gala, and Rome; let this set be denoted by myFav.
    Let yrFav be the set containing Fuji and Melba.
    1. Consider the intersection of myFav and yrFav. Express in words the interpretation of this intersection in the context of apple preferences. [2]

      The intersection of myFav and yrFav is the set of apple varieties that both you and I like.
    2. Consider the set difference yrFav - myFav. Express in words the interpretation of this set difference in the context of apple preferences. [2]

      The set difference yrFav - myFav is the set of apple varieties that you like but that I don't like
    3. We wish to implement some set operations using bitsets in Python. Define five Python variables Fuji, Gala, Spartan, Rome, Melba with appropriate integer values for use in a bitset. [2]
      fuji = 1 << 0
      gala = 1 << 1
      spartan = 1 << 2
      rome = 1 << 3
      melba = 1 << 4
    4. Using the variables you just defined, define a Python bitset for yrFav. [2]
      myFav = fuji | melba
    5. Write a Python expression for the intersection of myFav and yrFav. [2]

      myFav & yrFav
  7. What is wrong with the following Python loop? Rewrite it from scratch in a better way. [4]
    counter = 0
    sum = 0.0
    numitems = 0
    while counter < len(mylist):
    	sum = sum + mylist[counter]
    	numitems = numitems + 1
    average = sum / numitems
    counter is never incremented. Use a for loop:
    sum = 0
    for item in mylist:
    	sum += item
    average = sum / len(mylist)
  8. The following Python function has at least eleven errors. Find and fix all of them. Points will be deducted for "fixing" what are not errors. [6]
    define round(float):
    	"""Round a float to the nearest integer (up or down)."""
    	addhalf := (float++ 0.5)	// add 0.5 to float
    	Return integer((addhalf);

  9. Define or describe each of the following object-oriented terms: [7]
    1. Class: a user-defined container type
    2. Instance: an object; instances are to classes as variables are to types
    3. Attribute: a variable or method belonging to an object
    4. Method: a function/procedure belonging to an object
    5. Constructor: the special method which is called when an object is instantiated
    6. Interface: a set of messages that an object can receive
    7. Overloading: giving multiple definitions to a function/method/operator depending on the type of its parameters/operands
  10. Modula-2 and C have no built-in string type. What is a string in Modula-2 or C? [3]
    In M2 and C, strings are just arrays of characters, terminated by a null.
  11. Describe all the differences between Python lists and C arrays. [4]
    Python lists can change length (can insert/delete), can have items of differing type, can have items which change type (due to Python's dynamic typing), and have various operators/functions defined on them, such as del, len(), negative indexing, list slicing, etc.
  12. Explain all the differences between atomic and aggregate/compound/container data types. Give examples of each. [4]
    Atomic data types represent just a single entity/value: e.g., int, float, bool, complex. Container types represent a collection of items: e.g., list, tuple, dict, string, set, class.
  13. The file 'input.txt' contains a list of real numbers, one per line. Write a Python program to read in the numbers from the file and print their average to the screen. Docstring is required; pseudocode is not. [6]
    """Read in numbers from a file and print their average.
    The file 'input.txt' must contain float numbers, one to a line, no blank lines."""
    fileHandle = open('input.txt', 'r')
    stringList = fileHandle.readlines()
    sum = 0.0
    for s in stringList:
    	sum += float(s)
    print "The average is", sum/len(stringList)
  14. A certain sequence is defined by t1=0, t2=3, and after that ti=ti-1 + 2 ti-2, so that the first few terms of the sequence are 0, 3, 3, 9, 15, 33, 63, ....

    On a separate paper, write a recursive Python function to compute the nth term of this sequence. Docstring and preconditions are required; pseudocode is not (but may be good for partial credit). [8]
    def sequence(n):
    	"""Calculate the nth term of this funky sequence."""
    	if n <= 1:
    		return 0
    	elif n == 2:
    		return 3
    		return sequence(n-2) + 2*sequence(n-3)
  15. A dynamic system that is being accelerated at a constant acceleration a has its initial velocity u, final velocity v, and the distance travelled d related by the formula
    v2 - u2 = 2ad.

    On a separate paper, write an interactive Python program that can calculate either d or a in terms of the others. Use at least one function. Docstrings are required for the program and all functions. Pseudocode is not required (but may be good for partial credit). [8]
    """Interactive velocity/distance calculator."""
    def find_d(a, u, v):
    	"""Find the distance travelled, given accel and init/final velocities."""
    	return (v*v - u*u)/(2*a)
    def find_a(d, u, v):
    	"""Find the accel, given distance and init/final velocities."""
    	return (v*v - u*u)/(2*d)
    print "Welcome!  Let's do some physics!"
    u = float(input("What's the initial velocity? "))
    v = float(input("What's the final velocity? "))
    key = ''
    while key != 'd' and key != 'a':
    	key = raw_input("Do you know the distance (d), or the acceleration (a)? ")
    	if key == 'd':
    		d = float(input("What's the distance travelled? "))
    		print "The acceleration is", find_a(d, u, v)
    	elif key == 'a':
    		a = float(input("What's the acceleration? "))
    		print "The distance travelled is", find_d(a, u, v)
    		print "Please type either 'd' or 'a'"
    print "Hope you had fun!"