gpt4 book ai didi

python - 返回所有密码建议排列的函数

转载 作者:行者123 更新时间:2023-12-05 06:58:25 26 4
gpt4 key购买 nike

所以我们有一个(静态)映射,它指定了我们要用特殊字符替换的字母。除了我们不想只返回一个包含所有替换的字符串外,我们还想返回通过替换原始密码的一个或多个字符可实现的每个排列。这是一张这样的 map :

{'i': '!', 'a': '@', 's': '$', 'o': '0', 'E': '3'} 

这是我目前在 Python 中的内容:

def permute_password(password: str, chars_map: dict) -> List[str]:
def find(password, seen, ans):
if len(password)==0:
ans.append(seen)
return
for i in range(len(password)):
pass_cpy=password.copy()
if chars_map.get(pass_cpy[i]):
pass_cpy[i] = chars_map.get(pass_cpy[i])
find(pass_cpy, seen+pass_cpy[i]+pass_cpy[i+1:], ans)
return ans
ans=[]
return find(password, "", ans)

据我所知,我的问题在于 for 循环。具体来说,我不确定如何设置递归。

这就是它想要运行的函数:

special_chars = {'i': '!', 'a': '@', 's': '$', 'o': '0', 'E': '3'} 
print('\n'.join(permute_password("password", special_chars)))

这是期望的输出:

p@ssword
p@$sword
pa$sword
p@s$word
p@$$word
pa$$word
pas$word
p@ssw0rd
p@$sw0rd
pa$sw0rd
p@s$w0rd
p@$$w0rd
pa$$w0rd
pas$w0rd
passw0rd

最佳答案

如果不使用递归函数,您可以考虑使用堆栈(即,使您的函数迭代)而不是让您更容易理解:

def permutePassword(password: str, charsMap: dict) -> [int]:
permutations = []
len_of_password = len(password)
stack = [(list(password), 0)]
while stack:
curr, index = stack.pop()
if index == len_of_password:
permutations.append(''.join(curr))
else:
stack.append((curr, index + 1))
if curr[index] in charsMap:
curr[index] = charsMap[curr[index]]
stack.append((curr.copy(), index + 1))
return permutations[:-1] # last permutation will be the original password


specialChars = {'i': '!', 'a': '@', 's': '$', 'o': '0', 'E': '3'}
permutations = permutePassword("password", specialChars)
print('\n'.join(permutations))

输出:

p@$$w0rd
p@$$word
p@$sw0rd
p@$sword
p@s$w0rd
p@s$word
p@ssw0rd
p@ssword
pa$$w0rd
pa$$word
pa$sw0rd
pa$sword
pas$w0rd
pas$word
passw0rd

试一试 here

关于python - 返回所有密码建议排列的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64617018/

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