gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:49 26 4
gpt4 key购买 nike

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

从字符串中取出每个第 2 个字符,然后是不是每个第 2 个字符的其他字符,并将它们连接为新字符串。这样做 n 次!

例如:

"这是一个测试!", 1 -> "hsi etTi sats!""这是一个测试!", 2 -> "hsi etTi sats!"-> “s eT ashi tist!”

我写的函数是:

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

这似乎有效,测试功能的结果表明了这一点。但是现在我不知道如何扭转这个 Action 。例如,以 ("hsi etTi sats!", 1) 作为输入,我应该如何操作它才能将其恢复为“这是一个测试!”?我知道如何获取列表中的所有其他字符,但如何将它们放回去。我仍处于学习 Python 的早期阶段,所以我猜这是由于我对某些基础知识的了解存在漏洞。

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

如何操作 a 和 b 才能恢复 String?我不确定我是否已经澄清了自己。

提前感谢您抽出时间。

最佳答案

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

  • 当字符数为奇数时会发生什么?如果您 zipmap 长度不等的序列,最后一个字符将丢失。
  • 递归加密呢?

所以这是你的解密函数:

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!

关于Python:如何反转字符串的多个切片操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com