Here is a version that uses regular expressions:
import re
def alternate_case(s):
cap = [False]
def repl(m):
cap[0] = not cap[0]
return m.group(0).upper() if cap[0] else m.group(0).lower()
return re.sub(r'[A-Za-z]', repl, s)
Example:
>>> alternate_case('Hello world')
'HeLlO wOrLd'