2015-10-31 76 views
4
def word_count (x: str) -> str: 
    characters = len(x) 
    word = len(x.split()) 
    average = sum(len(x) for x in word)/len(word) 
    print('Characters: ' + str(char) + '\n' + 'Words: ' + str(word) + '\n' + 'Avg word length: ' + str(avg) + '\n') 

此代碼工作正常與普通字符串,但對於像字符串:發現平均字長字符串

'***The ?! quick brown cat: leaps over the sad boy.' 

如何修改代碼,以便像「***」的數字和「?!」沒有在代碼中考慮?上面這句話的平均單詞數應該是3.888889,但是我的代碼給了我另一個數字。

+0

您必須更精確地確定要過濾的內容。但基本思想是從x.split()中刪除被拒絕的「單詞」,並使用該簡化列表。 –

+0

如果問題是從某些詞語中刪除不需要的字符,則必須將其拼出來。 –

+0

使用're'過濾掉你不想包含的內容將是一個相對簡單的方法來達到這個目的(即雙空格,特殊字符等) –

回答

1

試試這個:

import re 

def avrg_count(x): 
    total_chars = len(re.sub(r'[^a-zA-Z0-9]', '', x)) 
    num_words = len(re.sub(r'[^a-zA-Z0-9 ]', '', x).split()) 
    print "Characters:{0}\nWords:{1}\nAverage word length: {2}".format(total_chars, num_words, total_chars/float(num_words)) 


phrase = '***The ?! quick brown cat: leaps over the sad boy.' 

avrg_count(phrase) 

輸出:

Characters:34 
Words:9 
Average word length: 3.77777777778 
0
import re 

full_sent = '***The ?! quick brown cat: leaps over the sad boy.' 
alpha_sent = re.findall(r'\w+',full_sent) 
print(alpha_sent) 

將輸出:

['The', 'quick', 'brown', 'cat', 'leaps', 'over', 'the', 'sad', 'boy'] 

爲了得到平均,你可以這樣做:

average = sum(len(word) for word in alpha_sent)/len(alpha_sent) 

哪位能給:3.77

+0

我遇到了麻煩,將其納入我的功能 - 你介意有點簡單地插入我的代碼上面? –

+0

如果你正在談論其他印刷品,你不需要合併它,那麼'word'將會是'len(alpha_sent)','char'將會是sum_(len_word) ' – Leb

2

串具有.translate()方法,你可以使用這個(如果你知道所有的字符,你想刪除):

>>> "***foo ?! bar".translate(None, "*?!") 
'foo bar'