如何删除字符串中特定位置随机插入的字符?
How to delete randomly inserted characters at specific locations in a string?
我之前在研究字符串加密的问题:(混淆更具体)。
现在我正在处理它的第二部分,即从混淆字符串中删除随机添加的字符和数字。
我的代码可以从字符串中删除 一个 随机字符和数字(当 encryption_str
设置为 1
时),但可以删除两个、三个.. nth ..字符数(当encryption_str
设置为2
、3
或n
时),不懂怎么修改。
我的代码:
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
个字符。
我之前在研究字符串加密的问题:
现在我正在处理它的第二部分,即从混淆字符串中删除随机添加的字符和数字。
我的代码可以从字符串中删除 一个 随机字符和数字(当 encryption_str
设置为 1
时),但可以删除两个、三个.. nth ..字符数(当encryption_str
设置为2
、3
或n
时),不懂怎么修改。
我的代码:
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
个字符。