Original answer below:
Please show us some sample input and output for an example. Based on your code, I can come up with the following – random.shuffle
shuffles everything in place and returns None
, change your makeKey to:
def makeKey(alphabet): alphabet = list(alphabet) random.shuffle(alphabet) return ''.join(alphabet)
EDIT 2:
For an approach without using dict
s in encryption/decryption, see below:
import random alphabet = 'abcdefghijklmnopqrstuvwxyz.,! ' # Note the space at the end, which I kept missing. # You could generate the key below using makeKey (i.e. key=makeKey(alphabet)) key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm' plaintext = "Hey, this is really fun!" # v! zmhvxdmxdmo!nll mikbg def makeKey(alphabet): alphabet = list(alphabet) random.shuffle(alphabet) return ''.join(alphabet) def encrypt(plaintext, key, alphabet): keyIndices = [alphabet.index(k.lower()) for k in plaintext] return ''.join(key[keyIndex] for keyIndex in keyIndices) def decrypt(cipher, key, alphabet): keyIndices = [key.index(k) for k in cipher] return ''.join(alphabet[keyIndex] for keyIndex in keyIndices) cipher = encrypt(plaintext, key, alphabet) print(plaintext) print(cipher) print(decrypt(cipher, key, alphabet))
Prints:
Hey, this is really fun! v! zmhvxdmxdmo!nll mikbg hey, this is really fun!
EDIT:
After some spacing issues and experimentation, I came up with this rather simple solution:
import random alphabet = 'abcdefghijklmnopqrstuvwxyz.,! ' key = 'nu.t!iyvxqfl,bcjrodhkaew spzgm' plaintext = "Hey, this is really fun!" def makeKey(alphabet): alphabet = list(alphabet) random.shuffle(alphabet) return ''.join(alphabet) def encrypt(plaintext, key, alphabet): keyMap = dict(zip(alphabet, key)) return ''.join(keyMap.get(c.lower(), c) for c in plaintext) def decrypt(cipher, key, alphabet): keyMap = dict(zip(key, alphabet)) return ''.join(keyMap.get(c.lower(), c) for c in cipher) cipher = encrypt(plaintext, key, alphabet) print(plaintext) print(cipher) print(decrypt(cipher, key, alphabet))
This prints:
Hey, this is really fun! v! zmhvxdmxdmo!nll mikbg hey, this is really fun!