MCQ: Variable Scope

Feb 13, 2014 • Martin Paulo

A multiple-choice question to distinguish novices from competent practitioners:

y = 3
def a(y):
    if y > 0:
        return y + a(y - 1)
    return y
print a(y)

Without resorting to the Python interpreter, what do you think this program will print out when run?

  1. 6
  2. 3
  3. An exception will be thrown

A “multiple-choice question to tell whether your audience has actually learned what you set out to teach”

x = 1
def fun():
    print ''x is: %i'' % x
    x = 3
x = 2
fun()

Without resorting to the Python interpreter, what do you think this program will print out when run?

  1. ‘x is: 1′
  2. ‘x is: 2′
  3. An exception will be thrown
  4. ‘x is: 3′

A “short practical exercise they could do to exercise their new knowledge”

The following code is an attempt to calculate n! (n! = n*(n-1)*(n-2)*…*2*1) for n = 4.
However, it is broken. Your challenge, should you choose to accept it, is to not only fix it, but also to make it work for different values of n.

n = 4
def factorial():
    number = number - 1
    if number == 0:
        return 1
    else:
        return number * factorial()
print '%i' % factorial()