'''Caesar cipher, using capital letters and '!;:,.? '.
>>> key = 7
>>> code = encode('ATTACK AT DAWN!', key)
>>> print code
H!!HJRGH!GKH,UA
>>> print decode(code, key)
ATTACK AT DAWN!
'''

ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ!;:,.? '
N = len(ALPHA)

def shift(ch, key):
    i = ALPHA.index(ch)
    assert i >= 0
    return ALPHA[(i+key) % N]

def shiftAll(text, key):
    code = [shift(ch, key) for ch in text]
    return ''.join(code)

def encode(text, key):
    return shiftAll(text, key)

def decode(code, key):
    return shiftAll(code, -key)

if __name__ == '__main__': 
    import doctest
    doctest.testmod() #verbose=True) 
