python - 需要缩短get函数

标签 python

我试图理解这段代码中的最后一行 - 我知道它正在 encdic 中获取等效的明文字符(加密字典并将其全部连接在一起以创建加密消息。什么是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

我该如何解决这个问题?

更新:

我已将代码更改为:

return s.join(encdic.get(c,c) for c in plaintext) 

似乎工作没有错误,但为什么?

最佳答案

您的 key 有两次 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']

关于python - 需要缩短get函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42870107/

相关文章:

javascript - 将渲染的 Django 模板与其他一些项目一起放入 Json 中

python - 自动化 REST 服务测试所需的建议

python - Django mptt数据库迁移报错

Python - 比较元组列表中的项目

python - 创建列表而不重置列表

python - 将 PostgreSQL 数据库与 Docker 和 Flask 结合使用,它是如何工作的?

python - python中的Clauset-Newman-Moore社区检测算法

python - Keras 无法使用回调来存储检查点

python - 如何从 Modbus Slave 读取所有保持寄存器?

python - Django 使用复合主键更新模型