因此,我一直試圖使用python實現無限猴定理。問題陳述就像這樣。嘗試使用Python的無限猴定理使用Python
這個定理指出,一隻猴子在打字機鍵盤上隨意敲擊鍵無限次地將鍵入給定的文本,如威廉莎士比亞的完整作品。那麼,假設我們用一個Python函數替換一隻猴子。這句話是:「認爲它就像一個狡猾的人」
我們將模擬這個的方法是編寫一個函數,通過從字母表中的26個字母中選擇隨機字母加上空間。我們將編寫另一個函數,通過比較隨機生成的字符串和目標來對每個生成的字符串進行評分。
第三個函數會重複調用generate和score,那麼如果100%的字母都是正確的,我們就完成了。如果這些字母不正確,我們將生成一個全新的字符串。
import random,string
shakespeare = 'methinks it is a weasel'
def generate():
char = string.ascii_lowercase+' '
randchars = ''.join(random.choice(char) for _ in range(27))
return randchars
def score():
scorenum = 0
randchars = generate()
print randchars
shake = shakespeare.split()
randlist = randchars.split()
for i,j in zip(shake,randlist):
if i==j:
scorenum = scorenum+1
scorecount = (scorenum/27)*100
return scorecount
def main():
run = 0
while not(score()==100):
score()
run = run + 1
print run
if run ==1000:
print score()
if __name__ == '__main__':
main()
因此,該程序運行的罰款,但我可以看到出現兩次,當我打印出來的隨機字符串,我已經達到3000000馬克沒有達到在匹配方面的任何成功。我相信我錯誤地寫了主要功能,但我還不確定這個問題。
如果你能幫我解決這個問題,請提前致謝。 :)
請忽略的打印語句,已經把它們進行調試。 – 2015-01-21 07:31:03
我把這個問題給了一隻猴子。他沒有留下深刻的印象。說莎士比亞粗魯的東西.... – 2015-01-21 07:33:28
在23個字符長的字符串。所以你有23^26 = 2.5405265e + 35選項。 3百萬不算什麼。實質上,你所要做的就是通過蠻力攻擊密碼。這將需要時間。 – RedX 2015-01-21 07:33:30