尝试解码函数
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
下面的解码有些问题,我一直在尝试 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