Python, substitution cipher [closed]

2019-09-22 05:21发布

问题:

I need to write a substitution cipher for the digits 0,1,2,3,...,9 substitutes each digit in 0,1,2,3,...,9. It can be represented as a 10 digit string specifying how each digit in 0,1,2,3,...,9 is substituted. For example, the 10 digit string '3941068257' specifies a substitution cipher in which digit 0 is substituted with digit 3, 1 with 9, 2 with 4, and so on. To encrypt a non negative integer, substitute each of it's digits with the digit specified by the encryption key. Implement function cipher() that takes as in put a 10 digit string key and a digit and a digit string (i.e., the clear text to be encrypted) and returns the encryption of the clear text.

>>>encrypt('3491068257', '132')
'914'
>>>encrypt('3491068257', '111')
'999'

Thank you for your help :)

回答1:

from string import maketrans

zero_through_nine = "".join(str(i) for i in range(10))
out_tab = "3491068257"
trantab = maketrans(zero_through_nine,out_tab )
print "111".translate(trantab)

hopefully you look into it to understand it....



回答2:

I would like to see an attempt out of the OP posted, but anyway

def encrypt(key,s):
    return ''.join(key[int(c)] for c in s)

This uses each "key" in the string, and uses that to look up the appropriate character.



回答3:

In the encrypt function you could create a map of lookups using the first string parameter. Then go through each character in the second parameter string and use this map for substitution and create and return a new string