我想构建一个非常简单的加密算法,该算法根据键值将一个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)
您可以使用模运算符('%')在除法后得到余数,即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'
您可以仅添加一个if条件,如下所示:
for i in message:
val=ord(i) + key
if val>122:
print(chr(val-26),end='')
else:
print(chr(val),end='')