我正在开发我的第一个python项目。它(又一个)密码字典生成器基于输入关于目标的相同密码信息(在这种情况下是社交工程本身!)。
我已经基于菜单部分工作正常,它使用户能够添加他们选择的单词并选择输出文件名,添加数字和添加特殊字符的选项。
我需要做的是: -
1)将单词输入到列表中(例如,kidsname,birthmonth,starsign)成功完成此位。它在[listA]
中2)将每个单词的首字母大写(例如,kidsname - > Kidsname)成功完成此位。然后将其保存在[listB]中。
3)取[listA]和[listB]中的单词并将它们混合到所有可能的组合中(例如,kidsname,kidsnamebirthmonth,Starsignkidsname,BirthmonthstarsignKidsname等等......这是我目前难以理解的部分我已经尝试过itertools.permutations而没有任何快乐。
最终..... 4)在开头和结尾添加数字序列(例如123kidsnameBirthmonth,starsignKidsname666等...)
5)添加特殊字符(例如Starsignbirthmonth123 - > St @ rsignbirthm0nth123)
任何想法。帮助赞赏。我现在只想要第3步的建议。当我到达他们时,我将跨越第4步和第5步! 谢谢 G.R。
答案 0 :(得分:1)
对于第3步:如何:
def eachCombination(listA, listB):
for a in listA:
for b in listB:
yield a + b
yield b + a
for combination in eachCombination(
['one', 'two', 'three'],
['blue', 'green', 'red']):
print combination
这应打印此列表:
oneblue
blueone
onegreen
greenone
onered
redone
twoblue
bluetwo
twogreen
greentwo
twored
redtwo
threeblue
bluethree
threegreen
greenthree
threered
redthree
更通用的方法可以像这样使用itertools
:
for product in itertools.product(
['one', 'two', 'three'],
['blue', 'green', 'red'],
['cancer', 'leo', 'virgo']):
for combination in itertools.permutations(product):
print ''.join(combination)
试试这个; - )
如果你想将它与每个元素的不同大小写结合起来,试试这个:
for product in itertools.product(
['one', 'two', 'three'],
['blue', 'green', 'red'],
['cancer', 'leo', 'virgo']):
for combination in itertools.permutations(product):
originalAndCapitalized = [ (original, original.capitalize())
for original in combination ]
for words in itertools.product(*originalAndCapitalized):
print ''.join(words)
我想强调的一点是你应该不创建列表。在这样的上下文中使用列表将立即填满你的记忆。使用少量变体创建的组合数量可能会变得很大。您只需要生成它们并迭代它们。
请确保您了解此上下文中的yield
关键字。