""" Source code for math-teach post by Kirby Urner / OST (c) GNU Public License, 2011 """
import string, random charset = list(string.ascii_lowercase + " ") def make_perm( ): "make some random permutation object mapping " ",a-z into itself" target = charset[:] # copy all random.shuffle(target) # in place reordering return Pobject(dict( zip(charset, target))) class Pobject: """ permutation objects are instantiated with a dict. they may be multiplied and/or inverted """ def __init__(self, perm): self.perm = perm def encrypt(self, plaintext): e = '' for char in plaintext: e += self.perm[char] return e def decrypt(self, ciphertext): e = '' inv = ~self # invert the permutation return inv.encrypt(ciphertext) def __invert__(self): invdict = {} for char in self.perm: invdict[self.perm[char]] = char return Pobject(invdict) def __mul__(self, other): output = {} for char in self.perm: output[char] = other.perm[self.perm[char]] return Pobject(output) def __repr__(self, abbrev = False): return str(sorted(self.perm.items(), key=lambda t: t[0])) _______________________________________________ Edu-sig mailing list Edu-sig@python.org http://mail.python.org/mailman/listinfo/edu-sig