Function returning higher order function
That's a pretty good solution to a tricky exercise.  I recommend two simplifications:


The definition of tple can be lifted out of f into cycle itself, as it never changes.
The code would be simpler if you count up instead of down.




def cycle(f1, f2, f3):
    tple = (f1, f2, f3)
    def f(n):
        def g(x, count = 0):
            if count == n:
                return x
            else:
                return g(tple[count % 3](x), count + 1)
        return g
    return f


As you observed, your g function is a leaky abstraction: it is supposed to take just an x argument, but it's possible to interfere with its proper behaviour by also passing it a count.  Here is one solution that avoids that problem ("apply f1, then move f1 to the end of the queue").

def cycle(f1, f2, f3):
    def f(n):
        def g(x):
            if n == 0:
                return x
            else:
                return cycle(f2, f3, f1)(n - 1)(f1(x))
        return g
    return f