Secret Codes
Our second challenge is to decode a message written in a secret code. We'll look at substitution ciphers, in which each letter is replaced by another. The description of what replaces what is called the key, which we can represent as a string of 26 letters; the first letter replaces "a", the second replaces "b", and so on. Here is the function to encode a message with a substitution cipher key (the Python library functions maketrans
and translate
do most of the work):
defencode
(msg, key): "Encode a message with a substitution cipher." return msg.translate(string.maketrans(ul(alphabet), ul(key))) deful
(text): return text.upper( ) + text.lower( )alphabet
= 'abcdefghijklmnopqrstuvwxyz'
Perhaps the simplest of all codes is the shift cipher, a substitution cipher in which each letter in the message is replaced by the letter n letters later in the alphabet. If n = 1, then "a" is replaced by "b" and "b" is replaced by "c", up to "z", which is replaced by "a". Shift ciphers are also called Caesar ciphers; they were state-of-the-art in 50 BC. The function shift
encodes with a shift cipher:
def shift
(msg, n=13):
"Encode a message with a shift (Caesar) cipher."
return encode(msg, alphabet[n:]+alphabet[:n])
We use the function like this:
>>> shift('Listen, do you want to know a secret?') 'Yvfgra, qb lbh jnag gb xabj n frperg?' >>> shift('HAL 9000 xyz', 1) 'IBM 9000 yza'
To decode a message without knowing the key, we follow the same methodology we did with segmentations: define a ...
Get Beautiful Data now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.