RosettaCodeData/Task/Caesar-cipher/Python/caesar-cipher-3.py

12 lines
445 B
Python

import string
def caesar(s, k = 13, decode = False, *, memo={}):
if decode: k = 26 - k
k = k % 26
table = memo.get(k)
if table is None:
table = memo[k] = str.maketrans(
string.ascii_uppercase + string.ascii_lowercase,
string.ascii_uppercase[k:] + string.ascii_uppercase[:k] +
string.ascii_lowercase[k:] + string.ascii_lowercase[:k])
return s.translate(table)