CS5nm Midterm Exam 1
E01, 08F, Phill Conrad, UC Santa Barbara
10/24/2008

Name: ________________________________________________________


Umail Address: __________________________________@ umail.ucsb.edu

Please write your name only on this page. That allows me to grade your exams without knowing whose exam I am grading.

This exam is closed book, closed notes, closed mouth, cell phone off,
except for:

There are 100 points worth of questions on the exam, and you have 50 minutes to complete the exam.

A hint for allocating your time:


  1. (20 pts) Write a Python function definition that takes the radius and height of a cone as parameters, and returns the volume of that cone. The formula for volume of a cone, in math notation, is v =1/3πr2h. You may use math.pi as the value of pi, and assume that the statement import math has already been included in the Python source file.

    Answer:

    There are many correct answers to this question. Here is one:


    def volumeOfCone(height, radius):
          return (1.0/3.0) * math.pi * (radius**2) * h


    An incorrect answer is this:

    def volumeOfCone(height,radius):
          return (1/3) * math.pi * (radius ** 2) * h


    The answer above will always return zero. Why?

    Another correct answer is this one:


    def volCone(h,r):
         return (math.pi * radius * radius * h)/3


    Note that this answer is correct, even though it doesn' t have 3.0, because the quantity being divided by the int value 3 is already a float. Why?

  2. (20 pts) Write a Python function definition that takes two parameters, each of which is a tuple representing an (x,y) point. Return the slope of the line that connects those two points. The formula for slope, in math notation is shown below. (For this exam question, don't worry about what happens if the denominator is zero.)
    m = (y2 - y1)/(x2-x1)

    Your function should pass these test cases:

    check_expect("slope test 1",slope((0,0),(4,3)),0.75)
    check_expect("slope test 2",slope((1,1),(3,3)),1.0)
    check_expect_within_tolerance("slope test 3",slope((0,0),(3,4)),1.333333,0.0001)


    There are many correct answers. Here is one:


    def slope(point1, point2):
         return (1.0 * point2[1] - point1[1]) / (point2[0] - point1[0])

    The 1.0 * is necessary to be sure that the numerator is a float before the division takes place. Another solution is to use a type conversion function, as shown in Chapter 3, section 3.1:

    def slope(point1, point2):
          return float(point2[1] - point1[1])/(point2[0] - point1[0])

    It is also possible to define a helper function and then use it, like this:

    def computeSlope(x1,y1,x2,y2):
          return float(y2-y1)/(x2-x1)

    def slope(point1,point2):
          return computeSlope(point1[0],point1[1],point2[0],point2[1])


    However, to make sure that the tests pass, it is important that the version of the function that takes two parameters be the one that takes the two tuples, as in the test cases.

    Finally, this will also work—we didn't cover this method in detail, but someone suggested it during lecture, and then a student ran it on her laptop and confirmed that it does work—and this version will pass the tests given.

    def slope((x1,y1),(x2,y2)):
          return float(y2-y1)/(x2-x1)



  3. (30 pts) Fill in the table below, according to these instructions:
    Description
    Expression
    Value
    Variables (if any)

    An expression involving the addition operator, one variable, and one int value

     

    x + 1
    3
    x=2

    An expression involving the ** operator


                 3**2             
    9

    An expression involving an operator that has a value of type string

     

    "x" + "y"
    xy

    An expression of type bool (Boolean)

     

    x<5
    True
    x=2

    An expression involving the multiplication operator, one variable,
    and where the result is of type float

     

    x * 2.0
    6.0
    x=3

    An expression involving one addition operator and one multiplication operator

     

    2+3*4
    14
  4. (15 pts) Listed below is an session from IDLE, showing interaction between a user and the Python shell. The response from the shell at various points has been replaced with blanks. Fill in the blanks with what the Python shell would print.

    If the blanks are too small, you can write your answers beside them.

    (The exact session you have will be similar to this one, but may be slightly different.
    The best way to check your answers is to try the session in IDLE yourself, so I have not filled in answers below.)

    >>> x = 3
    >>> y = 7
    >>> x * 5
    
    _______
    >>> y / 5
    
    _______
    >>> y / 7
    
    _______
    >>> y / 8
    
    _______
    >>> x + 2 * y
    _______
    >>> x + y
    
    _______
    >>> x = x + 2
    >>> x
    
    _______
    >>> x + y
    
    _______
    >>> y
    
    _______
    >>> x
    
    _______
    >>> "x"
    
    _______
    >>> "y" + "x"
    
    _______ 
    >>> "y" * 3
    
    _______
    >>> x * 2
    
    ________
    >>> x ** 2
    
    ________
    >>> 
  5. (10 pts) Suppose your friend is taking CS5NM, and says:

    I'm still not 100% clear on the difference between a function call and a function definition. I understand how they look different on the page—I mean, the function defintion has the word def in it, duh—and the function call doesn't. But I'm not sure I understand what they mean. Can you explain it?

    How do you explain the difference to your friend in plain english?


    There are many possible answers here.

    I'll scan some of the best actual answers given by students, ask their permission to put them online (anonymously), and if I'm given permission, I'll post them here later.

  6. (5 pts) Which of the following are legal variable names in Python? For each, circle yes or no:


    It's hard to circle in HTML, but I've used bold and background color to indicate the correct answers below, and in the no cases, to provide some explanation.

    Note that on your paper, the questions will be the same, but they may appear in a different order (shuffled), so be sure to check the questions as well as the answers.


    lunch_break Circle:       yes        no   
    onceAnd4All Circle:       yes        no
    twice bitten

    Circle:       yes        no

    (spaces are not permitted)

    3timesALady

    Circle:       yes        no

    (may not start with a digit)

    def

    Circle:       yes        no

    (def is a keyword—I don't expect you to memorize all the keywords, but this is one that you should know from defining functions)

    my-friend

    Circle:       yes        no

    (you can have an underscore, but a hyphen is prohibited, because it could be confused with a minus sign. These are two legal variables, and this is a python expression, saying "my minus friend")


End of Exam

Total points: ?