2016-04-21 93 views
0

嗨,所以我想寫一個函數hack()不接受任何參數,並返回一個遍歷所有可能的密碼的迭代器。創建一個迭代器來蠻力

基本上,我不得不用一個迭代器來強制密碼。我所知道的問題是:

  • 密碼由三部分組成。
  • 密碼的第一段是兩個單詞中的單詞的以下列表的級聯:「你好」,「滾吧」,「狗」,「MrCool」]
  • 中段是「Donkey20」
  • 而最後段由兩個數字一起(即1和7 = 17),是不大於38(和至少0)

我的思路的方法是這樣的:

  1. 使用permutati查找所有可能的POSSIBLE_WORDS組合附件()。 (查找所有分段1的可能性)
  2. 對於新列表中的每個組合,在末尾添加「Donkey20」。 (例如:helloBEGONEDonkey20)

  3. 查找THAT列表和POSSIBLE_NUMBERS中元素之間的所有可能組合。

  4. 創建一個迭代器遍歷所有這些可能的密碼,並將其返回

我當前的代碼只能夠做第2步,但不是Donkey20處於它在每個組合結束開始。 (例如Donkey20helloBEGONE而不是helloBEGONEDonkey20)

POSSIBLE_WORDS = ["hello", "BEGONE", "dog", "MrCool"] 
MIDDLE = "Donkey20" 
possible_numbers1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 
possible_numbers2 = [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28] 
possible_numbers3 = [29, 30, 31, 32, 33, 34, 35, 36, 37, 38] 
POSSIBLE_NUMBERS = possible_numbers1 + possible_numbers2 + possible_numbers3 

from itertools import permutations, combinations 

def hack(): 
    first_words = [''.join(word) for word in permutations(POSSIBLE_WORDS, 2)] 
    first_words.append(MIDDLE) 
    first_half = [''.join(word) for word in permutations(first_words, 2)] 

有什麼辦法解決這個問題?我如何完成剩下的步驟?我可以用不同的方法來編寫這個程序嗎?

任何幫助將非常感謝!

回答

2

首先,沒有理由建立這樣的POSSIBLE_NUMBERS。改用range(39)list(range(39))即可。

你在

first_words.append(MIDDLE) 

目的是幾乎可以肯定到一個字「Donkey20」釘到列表中的所有可能的第一部分結束而是改爲把它釘到年底各有第一個字。我認爲你的那部分代碼的意圖可以擺脫這條線以及以下行來更好地表達,只是用單線

first_half = [word + MIDDLE for word in first_words] 

當你放在一起最終可能的密碼,你將需要把數字轉換成字符串。無疑,您已經知道str(),但該功能的缺點是str(1)'1',而您可能需要'01'。在這種情況下,您可能需要使用format(),因爲format(1,'02')返回'01'

這應該足以讓你走了。由於這似乎是功課,我不想再說了。

+0

謝謝你的提示,我確實能夠自己完成剩下的工作! –