python - Python中的替换密码与字母映射
问题描述
我想做替换密码,但有一个字母映射而不是随机的字母。到目前为止,我的代码只是随机化它并且不使用字母映射,因为我不知道该怎么做。
#Substitution Cipher
def subst_cipher(alphabet):
alphabet = list(alphabet)
letter_map = {'a': 'm', 'b': 'k', 'c': 'n', 'd': 'o', 'e': 'c', 'f': 'v', 'g': 'w', 'h': 'z', 'i': 'b', 'j': 't', 'k': 'y', 'l': 'r', 'm': 'x', 'n': 'd', 'o': 'u', 'p': 'p', 'q': 'a', 'r': 'i', 's': 's', 't': 'f', 'u': 'q', 'v': 'e', 'w': 'l', 'x': 'g', 'y': 'j', 'z': 'h'}
random.shuffle(alphabet)
return ''.join(alphabet)
测试用例:
#What it should do
subst_cipher(letter_map,'Figaro')
returns: 'vbwmmu # I think
#what it does now
subst_cipher('Figaro')
returns: 'oaFirg'
帮助!
解决方案
您可以使用"".join()
和生成器表达式使用替换表映射字符串中的每个字母。
def subst_cipher(letter_map, text):
return "".join(letter_map.get(c, "?") for c in text)
我选择将不在地图中的字母?
替换为直接崩溃 ( letter_map[c]
)。
从上面用你的字母图调用它:
letter_map = {
"a": "m",
"b": "k",
# ... elided for brevity...
}
print(subst_cipher(letter_map, "figaro"))
输出
vbwmiu
这或多或少是您所期望的。
推荐阅读
- android - Ionic/Capacitor net::ERR_CONNECTION_REFUSED when Android calling API
- java - Is creating the same beans for tests in @Configuation violating DRY?
- github - Commit 不进入贡献图
- numpy - pyinstaller rejects numpy on Mac (M1, Big Sur & Intel Catalina)
- r - Read several csv files in r and merge them by 1st column(left join)?
- c++ - Getting MySQL Connector/C++ to work with Visual Studio 2019
- c# - eBay deletion/closure notifications using Web Reference
- javascript - How to get Data in the main array when filtering in the Sub Array
- asp.net-mvc - Why i have to use httpContextAccessor in Asp.Net to get user name and role?
- php - Symfony 4 HTTP 缓存标头在探查器和浏览器中不同