2015-03-31 79 views
0

雖然做了一些cryptanalysis,但我遇到了需要生成某些字符的組合的情況。這可以很容易地使用許多在線組合生成器來完成,除了我想FIX我已經知道某些字符的位置在正確的位置,而爲其餘的生成組合。例如,我有字符'A', 'B', 'c', 'D, 'e', 'F', and 'g'計算某些字符的組合,同時在某個點上修復某些其他字符

現在,我知道'A'會在第一個位置。所以第一時間修復'A'。現在,我知道第二和第三點可能是'B''c'。因此,排列'B''c'第二和第三點。對於第四名,我有一個固定的'D'。第五,一個固定的'e'。第六,'F''f'。第七,'g''3'。等等..

我的問題是我如何修復某些字符,而按照我想要的方式排列其餘的字符?有什麼工具可以使用,或者我需要自己寫嗎?有人能指點我一個簡單的方法嗎?

回答

1

這可以用Python的itertools.product()功能來解決:

#!/usr/bin/env python 
from __future__ import absolute_import, division, print_function 
from itertools import product 


def main(): 
    for characters in product(*['A', 'Bc', 'Bc', 'D', 'e', 'Ff', 'g3']): 
     print(''.join(characters)) 


if __name__ == '__main__': 
    main() 

,它的輸出:

ABBDeFg 
ABBDeF3 
ABBDefg 
ABBDef3 
ABcDeFg 
ABcDeF3 
ABcDefg 
ABcDef3 
AcBDeFg 
AcBDeF3 
AcBDefg 
AcBDef3 
AccDeFg 
AccDeF3 
AccDefg 
AccDef3 
+0

啊,正是我想要的。我喜歡Python和StackOverflow。每次我在這裏發帖時都會有新的東西要學。一個問題:如果我想讓最後一個字符是'!'或什麼都沒有 - abcdefg!或'abcdefg - 然後我會寫':'用於產品中的字符(* ['A','Bc','Bc','D','e','Ff','g3','!\ 0' ])'。那是對的嗎? – learnerX 2015-03-31 14:08:08

+1

@intellikid不會是'!'或最後一個位置的空字節。打印時看不到空字節,但它在那裏,可能會混淆你用來處理輸出的程序。你可以使用'['!','']'而不是''!\ 0''。這是'!'或者一個空字符串。 – BlackJack 2015-03-31 14:32:42