如何删除字符串中特定位置随机插入的字符?

How to delete randomly inserted characters at specific locations in a string?

我之前在研究字符串加密的问题:(混淆更具体)。

现在我正在处理它的第二部分,即从混淆字符串中删除随机添加的字符和数字。

我的代码可以从字符串中删除 一个 随机字符和数字(当 encryption_str 设置为 1 时),但可以删除两个、三个.. nth ..字符数(当encryption_str设置为23n时),不懂怎么修改。

我的代码:

import string, random
def decrypt():

    encryption_str = 2 #Doesn't produce correct output when set to any other number except 1

    data = "osqlTqlmAe23h"
    content = data[::-1]
    print("Modified String: ",content)
    
    result = []
    result[:0] = content

    indices = []
    for i in range(0, encryption_str+3): #I don't understand how to change it
       indices.append(i)

    for i in indices:
      del result[i+1]

    message = "".join(result)
    print("Original String: " ,message)

decrypt()

加密级别 1 的输出(正确输出)

加密级别 2 的输出(不正确的输出)

为什么不尝试一些模运算?也许使用您的原始字符串,您可以尝试以下操作:

''.join([x for num, x in enumerate(data) if num % encryption_str == 0])

添加字符很容易,删除它们有点困难,因为这会改变字符串长度和字符的位置。

但是有一个简单的方法:检索好的方法,为此您只需要使用 encryption_str+1 作为步骤进行迭代(避免在索引上添加 if

def decrypt(content, nb_random_chars):
    content = content[::-1]
    result = []
    for i in range(0, len(content), nb_random_chars + 1):  
        result.append(content[i])
    message = "".join(result)
    print("Modified String: ", content)
    print("Original String: ", message)


    # 3 lines in 1 with : 
    result = [content[i] for i in range(0, len(content), nb_random_chars + 1)]

两者都会给hello

decrypt("osqlTqlmAe23h", 2)
decrypt("osqFlTFqlmFAe2F3h", 3)

列表理解如何(这实际上只是@azro 回答的稍微更紧凑的表示法)?

result = content[0::(encryption_str+1)]

也就是说,从第一个开始,从 content 中取出每个 encryption_str+1 个字符。