虽然这似乎是一个已经回答的问题,但事实并非如此。
我正在尝试找到一种方法来执行以下操作:
预期输出的一个例子如下所述:
首先,程序将通过改变每个i来进行,具有:
"Th!s !s my str!ng"
接下来,它将改变$:
中的s"Thi$ i$ my $tring"
现在我完成了1个字符的排列,我需要开始2个字符的排列:
"Th!$ !s my $tr!ng"
由于我只有一对,所以我在这里只有一个可能的排列,因此程序结束。
我试图弄清楚如何在python中做到这一点,但我最终只能在"如果......那么......"并且必须有一种更有效的方法。
对于那些好奇的人,我对此很感兴趣因为我失去了#34;我的密码。我的意思是,我的密码类似于"我喜欢冰淇淋",但作为我负责的人,我用符号改变了一些角色,现在我不知道它是什么......
答案 0 :(得分:4)
这并不完全符合您的要求,但它可能有所帮助:
from itertools import product
SUBSTITUTIONS = {
"i": "!1|",
"o": "0",
"s": "$5",
}
def sub(text):
possibilities = [c + SUBSTITUTIONS.get(c, "") for c in text]
# 'spoils' -> ['s$5', 'p', 'o0', 'i!1|', 'l', 's$5']
for subbed in product(*possibilities):
print("".join(subbed))
它使用itertools.product()
来迭代SUBSTITUTIONS
的{{1}}的每个可能组合:
text
我已经重新格式化了输出的紧凑性,但你明白了。显然,候选密码的数量会随着替换次数呈指数级增长,但是你可以做的并不多。