简单加密算法Python

问题描述 投票:-1回答:2

我想构建一个非常简单的加密算法,该算法根据键值将一个char转换为另一个char。例如键值为2的'abc'将是->'cde'。我的代码基本上可以正常工作,但是问题在于它不会围绕小写字母进行迭代(键值1的“ z”应再次为“ a”)。我也希望结果是一个字符串。希望任何人都可以帮助我! :)

def encrypt(message, key):
    message = message.lower().replace(" ", "")
    print("lower case message: " + message)



    for i in message:
         print(chr(ord(i) + key))

encrypt('abc', 1)
python encryption iteration alphabetical
2个回答
0
投票

您可以使用模运算符('%')在除法后得到余数,即10%3为1。您可以使用它使您的值在特定点“回绕”。

我将您的计算移到两个单独的语句中,以使情况更清楚-首先,我们通过减去97找到实际字符的值(a => 0,b => 1,c => 2等)从char值。然后,我们添加密钥,并确保将其绕回26(因为英文字母中只有26个小写字母)。然后,我们再次添加97以再次获得该字母的正确ascii值。

'z'首先是122,减去97得到25,加上1得到26。使用取模运算符,这告诉我们其余的将是0-再次有效地环绕到a。我们通过将97加到0来获得字符-得到97-这是a的ascii值。

要返回完整的字符串,我们使用+=将每个字符添加到结果中。这样,我们可以在返回之前将每个字母附加到之前的字母序列。

def encrypt(message, key):
    message = message.lower().replace(" ", "")
    print("lower case message: " + message)
    result = ""

    for i in message:
        offset_from_a = (ord(i) - 97) + key
        chr_value = 97 + (offset_from_a % 26)
        result += chr(chr_value)

    return result

encrypt('abc', 1) => 'bcd'
encrypt('zbc', 1) => 'acd'

0
投票

您可以仅添加一个if条件,如下所示:

for i in message:
    val=ord(i) + key
    if val>122:
        print(chr(val-26),end='')
    else:
        print(chr(val),end='')
© www.soinside.com 2019 - 2024. All rights reserved.