尝试解码函数

Attempting to decode function

下面的解码有些问题,我一直在尝试 return 到原始字符串。有没有人可以帮忙?

def encode(n, i=0, key=5):
   if i >= len(n):
      return n 

   chars = list(n)
   chars[i] = chr(ord(list(n)[i]) + key) 
   return encode("".join(chars), i=i+1)

当向调用提供不同于 5 的密钥时,该函数可能会出现意外行为。在这种情况下,递归调用将不会获得该密钥,但仍会使用默认值 5。

递归调用逻辑上应该是return encode("".join(chars), i=i+1, key=key)

如果代码是这样固定的,您可以用 k 的负值调用它,它会起作用:

def encode(n, i=0, key=5):
   if i >= len(n):
      return n 

   chars = list(n)
   chars[i] = chr(ord(list(n)[i]) + key) 
   return encode("".join(chars), i=i+1, key=key)
   #                                  ^^^^^^^^^ fix

s = "What's another year"
s2 = encode(encode(s), 0, -5)
print(s == s2)  # True

请注意,该函数不必要地使用了递归。它还将给定的字符串反复转换为列表并返回字符串。这是一个如何做到这一点的例子。

改为使用此函数:

def encode(s, key=5):
    return "".join(chr(ord(ch) + key) for ch in s)

并用作:

s = "What's another year"
s2 = encode(encode(s), -5)   # Without the i-argument.
print(s == s2)  # True