我试图理解这段代码中的最后一行 - 我知道它正在encdic
中获取等效的明文字符(encyption字典并将它们连接在一起以创建加密消息。什么是{{1代码做(取上面的字符并将其转换为较低的字符?如果所有字符都已经小写 - 我如何缩短最后一行
l.lower
当我将代码缩短为:
return s.join(encdic.get(c.lower(), c) for c in plaintext)
plaintext = "hhis is a fairly long piece of plainhexh fourscore and seven"
d = 'gikaclmnqrpoxzybdefijstuvw' #decryption key
encdic = dict(zip(alphabet, d)) #create decryption dictionary
decdic = dict(zip(d, alphabet)) #create decryption dictionary
def encrypt(plaintext, d):
s=""
return s.join(encdic.get(c.lower(), c) for c in plaintext)
我收到以下错误
return s.join(encdic.get(c) for c in plaintext)
我该如何解决这个问题?
更新
我已将代码更改为:
TypeError: sequence item 4: expected str instance, NoneType found
似乎无误地工作,但为什么?
答案 0 :(得分:2)
您的密钥有i
两次且缺少h
数据:强>
d = 'gikaclmnqrpoxzybdefijstuvw' # decryption key
测试代码:
print(sorted(list(set(d))))
print(sorted(list(d)))
<强>结果:强>
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'i', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
答案 1 :(得分:0)
get()方法定义如下:
dict.get(key, default=None)
由于给定的密钥c返回None,这意味着密钥c不可用。
你提到这个有效:return s.join(encdic.get(c,c) for c in plaintext)
这样做的原因是因为当&#39; c&#39;找不到键,返回默认值c。假设字母为'abcdefghijklmnopqrstuvwxyz'
,唯一不能找到c的是它是否为空白。因此,您的空白字符不会被加密。
以前在执行return s.join(encdic.get(c) for c in plaintext)
时,当c是空格时,这不是有效键,因为您的键只包含字母a-z。
这是一个有效的例子:
alphabet = 'abcdefghijklmnopqrstuvwxyz'
plaintext = "hhis is a fairly long piece of plainhexh fourscore and seven"
d = 'gikaclmnqrpoxzybdefijstuvw' #decryption key
encdic = dict(zip(alphabet, d)) #create decryption dictionary
decdic = dict(zip(d, alphabet)) #create decryption dictionary
def encrypt(plaintext):
return "".join(encdic.get(c, c) for c in plaintext)
def decrypt(encrypted_text):
return "".join(decdic.get(c, c) for c in encrypted_text)
encrypted_text = encrypt(plaintext)
decrypted_text = decrypt(encrypted_text)
print("plaintext:", plaintext + '\n'
"encrypted_text:", encrypted_text + '\n'
"decrypted_text:", decrypted_text + '\n')
答案 2 :(得分:0)
这是一个适合我的解决方案。
alphabet
我能够使用此代码获取加密字符串和解密字符串。错误可能出现在h
的定义中,或者您可能正在传递一个字符串以解密其中包含字母d
的字符串,因为{{1}}中缺少该字符串,因此您可以“{1}} t解密和加密字符串,如果它包含字符&#39; h&#39;。