2009-06-14 12 views
4

私はある種類の暗号文の文字の頻度を見つけるツールを作ろうとしています。 すべて小文字のa〜z番号なしとします。エンコードされたメッセージはtxtファイルにあります暗号文の文字頻度を決定する

私は、置換またはおそらく転置暗号の解読に役立つスクリプトを作成しようとしています。

これまでコード:

cipher = open('cipher.txt','U').read() 
cipherfilter = cipher.lower() 
cipherletters = list(cipherfilter) 

alpha = list('abcdefghijklmnopqrstuvwxyz') 
occurrences = {} 
for letter in alpha: 
    occurrences[letter] = cipherfilter.count(letter) 
for letter in occurrences: 
    print letter, occurrences[letter] 

それは今のところありませんすべては文字が表示された回数を示しています。 このファイルにあるすべての文字の頻度をどのように出力しますか?

+0

質問は何ですか? 26回サイファーフィルタをスキャンしていることに注意してください。 – Drakosha

+2

"これまでのことは、文字が何回出現するかを示しています。このファイルにあるすべての文字の頻度をどのように出力しますか?"何?頻度は、手紙が何回出現するかです。文字が何回出現するかを示すと、それは各文字の頻度です。これは動作するようです。あなたの質問は何ですか? –

答えて

17
import collections 

d = collections.defaultdict(int) 
for c in 'test': 
    d[c] += 1 

print d # defaultdict(<type 'int'>, {'s': 1, 'e': 1, 't': 2}) 

ファイルから:defaultdictコンテナである天才のために

myfile = open('test.txt') 
for line in myfile: 
    line = line.rstrip('\n') 
    for c in line: 
     d[c] += 1 

、私たちは感謝と賞賛を与える必要があります。あなたは文字cのrelative frequencyを知りたい場合は、入力の長さCの発生回数を分割しなければならない

s = "andnowforsomethingcompletelydifferent" 
d = {} 
for letter in s: 
    if letter not in d: 
     d[letter] = 1 
    else: 
     d[letter] += 1 
+0

defaultdict ...非常に良い! – Jake

2

:そうでなければ、私たちはすべて、このような愚かな何かをやっていると思います。アダムの例にとり例えば

、:

s = "andnowforsomethingcompletelydifferent" 
n = len(s) # n = 37 

dict[letter] 

に各文字の絶対度数を保存する私達はにより相対的頻度を得る:それを入れ

from string import ascii_lowercase # this is "a...z" 
for c in ascii_lowercase: 
    print c, dict[c]/float(n) 

一緒に、私たちはこのような何かを得る:

# get input 
s = "andnowforsomethingcompletelydifferent" 
n = len(s) # n = 37 

# get absolute frequencies of letters 
import collections 
dict = collections.defaultdict(int) 
for c in s: 
    dict[c] += 1 

# print relative frequencies 
from string import ascii_lowercase # this is "a...z" 
for c in ascii_lowercase: 
    print c, dict[c]/float(n) 
+2

変数名として 'dict'を使うべきではありません。 –

9

近代的な方法:

from collections import Counter 

string = "ihavesometextbutidontmindsharing" 
Counter(string) 
#>>> Counter({'i': 4, 't': 4, 'e': 3, 'n': 3, 's': 2, 'h': 2, 'm': 2, 'o': 2, 'a': 2, 'd': 2, 'x': 1, 'r': 1, 'u': 1, 'b': 1, 'v': 1, 'g': 1})