2015-07-20 60 views
-2

我想寫一些Python採取了密碼,並將其分成字母和它們在密碼的頻率。我遇到的問題是我可以得到代碼來打印密碼中字母的頻率,但我試圖單獨獲取它們,以便將它們轉換爲百分比,以便將它們與在書,例如。例如。我可以比較我的密碼中E的數量和英語的12.7%的平均值。我遇到的問題是,當我嘗試分割字母及其頻率列表時,我得到AttributeError:'tuple'對象沒有'split'屬性。不知道我能做些什麼,所以一些幫助將不勝感激。這裏是我的代碼: 進口藏品 進口串AttributeError的:「元組」對象有沒有屬性「分裂」

def freq(): 
    info = input("File Name") 
    filehandle = open(info, "r") 
    data = filehandle.read().upper() 
    char_counter = collections.Counter(data) 
    for char, count in char_counter.most_common(): 
     if char in string.ascii_uppercase: 
      print(char, count) 
      s = (char, count) 
      frequency = s.split(",") 
      for freq in frequency: 
       print(freq) 

freq() 

這是殼

File Nametest.rtf 
E 59 
Traceback (most recent call last): 
    File "/Users/x/Desktop/Frequency.py", line 17, in <module> 
    freq() 
    File "/Users/x/Desktop/Frequency.py", line 13, in freq 
    frequency = s.split(",") 
AttributeError: 'tuple' object has no attribute 'split' 

這裏的直接複製它在做什麼之前:

File Nametest.rtf 
E 59 
A 43 
T 39 
R 37 
O 29 
F 25 
P 25 
S 23 
L 23 
I 22 
N 19 
D 18 
B 17 
C 15 
H 14 
M 12 
G 9 
U 8 
W 8 
V 6 
Y 4 
X 3 
K 3 

林如果可能的話,尋找E 12%A 10%等等的個別事物或類似的東西。

任何幫助將不勝感激。非常感謝提前:)

回答

1

你應該改變你的代碼:

def freq(): 
    info = input("File Name") 
    filehandle = open(info, "r") 
    data = filehandle.read().upper() 
    char_counter = collections.Counter(data) 
    for char, count in char_counter.most_common(): 
     if char in string.ascii_uppercase: 
      print(char, count) 
      frequency = (char + str(count)) 
      for freq in frequency: 
       print(freq) 

固定行:

s = (char, count) 
    frequency = s.split(",") 

從這樣微小的信息很難說是這些行的確切功能,但解決辦法是什麼像那樣。

1

您正在秒的元組,元組不會有分裂的逗號不是元組的實際部分是在代碼劃定不同的條目的方式。 Split只適用於某些類型,例如字符串,並且只有當逗號是字符串/類型實例的一部分時纔可以工作。

我不確定你想從你那部分代碼中跳出來,但是你要告訴它創建一個元組(char,count),然後用逗號分隔這個元組(儘管它不可​​行確實發生了,你會得到一個數組[char,count]),然後爲該分割元組中的每個值打印該值,該值將打印char,count。

也許去重新審視你去這個方式,你不會得到從分裂,你沒有在事先打印語句已經顯示任何有用的信息。如果你的意圖只是信件和頻率,那麼你已經完成了,如果你想要得到比例,加上所有的頻率,然後用每個頻率來獲得它所代表的總比例?

相關問題