Python:如何反转字符串的多个切片操作

我正在研究一个有趣的
Python编码问题:

从字符串中获取每个第二个字符,然后是不是每个第二个字符的其他字符,并将它们作为新字符串连接起来.
这样做n次!

例如:

“这是一个测试!”,1 – > “hsi etTi坐着!”
“这是一个测试!”,2 – > “hsi etTi坐着!” – > “真是太棒了!”

我写的函数是:

def encrypt(text, n):
    if n <= 0:
        return text
    else:
        a = encrypt(text, n-1)[1::2]
        b = encrypt(text, n-1)[::2]
        return a+b

这似乎有效,由测试功能的结果显示.但现在我不知道如何扭转这一行动.例如,用(“hsi etTi sats!”,1)作为输入,我该如何操作它以便它可以恢复为“这是一个测试!”?我知道如何把列表中的每个其他角色都拿走,但是你怎么把它们放回去.我还处于学习Python的早期阶段,所以我想这是因为我对基础知识的了解.

String = "ABCDEF"
a= String[1::2] = "BDF"
b= String[::2] ="ACE"

你如何操纵a和b以便可以恢复字符串?我不确定自己是否澄清过.

感谢您提前的时间.

最佳答案 其他一些答案缺少您完整问题的两个重要方面

>当字符数为奇数时会发生什么?如果您压缩或映射不等长度的序列,则最后一个字符将丢失.
>递归加密怎么样?

所以这是你的解密功能:

def encrypt(text, n):
    if n <= 0:
        return text
    else:
        a = encrypt(text, n-1)[1::2]
        b = encrypt(text, n-1)[::2]
        return a+b

def decrypt(text, n):
    if n <= 0:
        return text
    else:
        a, b = text[:len(text)//2], text[len(text)//2:]
        text = "".join(map(lambda x, y: x + y, b, a))
        text = decrypt(text, n-1)
        if len(b) > len(a):
            # happens for odd number of characters. We need to append last from b
            text += b[-1]
        return text

s = "This is a test!"

print("n=1: {0}".format(decrypt(encrypt(s, 1), 1)))
print("n=2: {0}".format(decrypt(encrypt(s, 2), 2)))
print("n=3: {0}".format(decrypt(encrypt(s, 3), 3)))

>>> n=1: This is a test!
>>> n=2: This is a test!
>>> n=3: This is a test!
点赞