【问题标题】:Is there any way to make the below code in one-line有没有办法在一行中制作下面的代码
【发布时间】:2020-08-28 11:06:35
【问题描述】:

我正在尝试一种密码技术(One Time Pad),我得到了解决方案,但想将其设为单行。这里分别是一个示例输入和输出。INPUT(TEXT) = 'HELLO', KEY = 'XMCKL', OUTPUT(CIPHERTEXT) = 'EQNVZ'。

def ciphertextFor(text, key):
    cpt = []
    for i in range(len(text)):
        cpt.append(chr((ord(text[i])+ord(key[i])) % 26+65))
    return ''.join(cpt)
    # return ''.join(chr((ord(text[j])+ord(key[j])) % 26+65)) for j in range(len(text)))

【问题讨论】:

  • 那么你的尝试有什么问题?
  • 请提供样本输入和预期输出。阅读minimal reproducible example
  • 假设文本和键的长度相同,这个列表理解应该可以工作[chr((ord(text[i])+ord(key[i])) % 26+65) for i in range(len(text))
  • 这样的东西(未经测试)可能会做到这一点。我会让你判断它是否是对原始代码的改进。 ciphertextFor = lambda text, key: ''.join(chr((ord(t) + ord(k)) % 26 + 65) for t, k in zip(text, key))
  • @GiladGreen 它测试了我的解决方案并且出现了错误。我太不耐烦了,我没有检查它。感谢 Akshay Sehgal,我意识到了自己的错误。

标签: python python-3.x encryption methods one-liner


【解决方案1】:

直接从上面的函数中尝试简单的列表理解 -

text, key = 'ajshwhsuhe','amchaksheo'

cipher = ''.join([chr((ord(text[i])+ord(key[i])) % 26+65) for i in range(len(text))])

print(cipher)
'MHGAIDWNXE'

【讨论】:

  • @AkshaySehgal 使用zip 更好。
【解决方案2】:

您可以使用zip 同时遍历输入和键中的字符

>>> input, key = 'HELLO', 'XMCKL' 
>>> ''.join(chr((ord(x)+ord(y)) % 26+65) for x,y in zip(input, key))
'EQNVZ'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多