2014-01-16 41 views
2

我正在嘗試在Python中編寫代碼,該代碼查找給定字符串中字母表的百分比。例如,查找非空字符串的百分比

percent("ab", "aabccdef")應該給[("a", 25), ("b", 13)]因爲'a'長度爲8的字符串出現兩次,因此,其比例爲round(2/8),或25 同樣,'b'只發生一次。所以它的百分比是round(1/8),或者13.

這是我的代碼。有人可以幫我調試嗎?

def Percent(alpha, string): 
    y = [e for e in string if e == alpha] 
    x = len(y) 
    return (alpha, round((x/len(string) * 100))) 

回答

3

你是接近,但關鍵的區別是,你需要計算它的每個字符calpha

def percent(alpha, string): 
    results = [] 
    for c in alpha: 
     y = [e for e in string if e == c] 
     x = len(y) 
     results.append((c, round((float(x)/len(string)*100)))) 
    return results 

在你的代碼要比較e == alphaalpha是一個字符串abe是字符串中的單個字符。這不會給你你想要的結果。

此外,如果您希望正確計算百分比,則需要將x轉換爲float。在Python中,如果你寫了,例如3/4,你會得到0而不是0.75。爲了防止這種情況,您需要將至少一個參數轉換爲float,可以通過調用float()來完成。所以你也可以寫x/float(len(string)*100)以確保你不會得到一個整數作爲結果。

3

另一種方式來做到這一點,你可以在列表解析使用str.count

>>> alpha = 'ab' 
>>> string = 'aabccdef' 
>>> [(x, string.count(x)/len(string)) for x in alpha] 
[('a', 0.25), ('b', 0.125)] 
+0

感謝。是否有可能用更簡單的東西替換.count(x),以便不使用內置函數? – Rachel

+0

那麼,你可以用'len([s for s in string if s == x])'替換'string.count(x)''',但我不認爲它更簡單。 – eskaev

+0

如果你想看看'str.count'的作用,我在答案中加了一個鏈接。如果你不喜歡'count',Simeon的答案很好。 – eskaev