Extra Practice for Week 4 (Due never) Code Tracing (CT) Exercises


These problems will help you prepare for hw4 and quiz4. They are optional and you are encouraged to collaborate when working on them.
Code Tracing (CT)
What will each of these print?

  1. def ct(a, b):
        a += [3]
        a = a + [4]
        for c in a:
            for i in range(len(b)):
                if (b[i] not in a):
                    print("A", end="")
                    b[i] += c
                elif (c % 2 == 1):
                    print("B", end="")
                    b += [c]
                elif (b[-1] != c):
                    print("C", end="")
                    b = b + [c]
        return (a,b)
    a = [4]
    b = [2,3]
    print(ct(a,b))
    print(a,b)

  2. def ct(L):
        result = [ ]
        M = [L[i]*10**i for i in range(len(L))]
        for val in M:
            result.extend([val, L.pop()])
        return result
    L = [2,5,3]
    M = ct(L)
    print(L, M)

  3. def ct(L):
        result = [ ]
        M = L[:] # same as M = copy.copy(L)
        if (M == L): result.append(1)
        if (M is L): result.append(2)
        if (M[0] == L[0]): result.append(3)
        if (M[0] is L[0]): result.append(4)
        return result
    print(ct([5,7,6]))

  4. def ct(L):
        M = L
        L += [4]
        M = M + [5]
        print(L, M)
    ct(list(range(1)))

  5. import copy
    
    a = [1,2,3,4]
    (b,c) = (a, copy.copy(a))
    print((a == b), (a == c))
    print((a is b), (a is c))
    print((a[0] is b[0]), (a[0] is c[0]))
    a = [1,2]
    (b,c) = (a, copy.copy(a))
    b[0] += 10
    c[1] += 100
    for L in [a,b,c]: print(L) 
    
    a = [1,2]
    (b,c) = (a, copy.copy(a))
    a[0] += 1
    b[0] += 2
    c[1] += 3
    a[0] = c[0]
    b[0] = a[1]
    
    for L in [a,b,c]: print(L)
    print()
    
    a = list(range(2,10,7))
    (b, c) = (a, a[:2]) 
    b[0] += 3
    a += [3]
    a = a + [4]
    print(c + [b[0]])
    print(c.append(b[1]))
    print(a, b, c)

  6. import copy
    
    def f(a, b):
        a = copy.copy(a) 
        a[0] = b[1]
        b[0] = a[1] 
        return a + b
    a1 = a2 = list(range(5,7))
    b1 = b2 = list(range(2))
    a1 = f(a1, b1)
    print(a1, a2, b1, b2)

  7. def onesDigit(n):
        return n%10
    
    def ct(L):
        for i in range(len(L)):
            L[i] += sum(L) + max(L)
        return sorted(L, key=onesDigit)
    a = [2,1,0]
    print(ct(a))
    print(a)

  8. def ct(a):
        a[1] = "foo"
        a[0], a[2] = a[2], a[0]
        print(a)
        b = a
        b.extend([42, "wow" ])
        b.pop()
        print(b)
        c = [] + b
        c[1:-1] = ["Hello" , "World" ]
        return c
    lst = [15, "1" , "twelve" ]
    print(ct(lst))
    print(lst)