2011-02-04 44 views
2

所以我的函數應該打開一個文件並計算字長並給出輸出。例如,計算文件中的字長

許多( 'SAMPLE.TXT')

字長度的1:2個

字長度2:7個

單詞:長度爲3的6個

詞長度4:6

我的sample.txt文件包含: 這是一個測試文件。一個字的長度是多少? 長度有三個單詞?我們應該弄明白! 函數可以做到這一點嗎?

我的編碼到目前爲止,

def many(fname): infile = open(fname,'r') 
text = infile.read() 
infile.close() 
L = text.split() 
L.sort 
for item in L: 
    if item == 1: 
     print('Words of length 1:', L.count(item)) 

誰能告訴我什麼,我做錯了。我稱這個函數沒有任何反應。顯然是因爲我的編碼,但我不知道該從哪裏出發。任何幫助將很好,謝謝。

+1

如果蟒蛇我以爲這? – birryree 2011-02-04 06:22:50

+0

是的,抱歉忘了添加標籤。 – 97834657647563 2011-02-04 06:27:10

回答

1

你有什麼期望在這裏

if item == 1: 

這裏

L.count(item) 

又是什麼實際發生?使用調試器並查看變量值或將其打印到屏幕上。

2

您想要獲取文件中長度(1,2,3,4,...字符)的列表以及具有此長度的單詞的出現次數。

因此,直到L = text.split()這是一個很好的方法。現在看一下Python中的字典,這將允許您存儲上述數據結構並遍歷文件中的單詞列表。只是一個提示...

0

讓我們一步一步分析你的問題。

您需要:

  1. 檢索所有從文件
  2. 迭代的話在所有的話每次都發現長度的字N
  3. 輸出時間
  4. 增加計數器N結果

您已經完成了第1步:

def many(fname): 
    infile = open(fname,'r') 
    text = infile.read() 
    infile.close() 
    L = text.split() 

然後你(嘗試)排序的話,但它沒有用。你會按字母數字排序,所以它對你的任務沒有用。

相反,讓我們定義一個Python dictionary持有的話

lengths = dict() 

@sukhbir在註釋中使用Counter類正確的建議,我鼓勵你去尋找它的計數,但我在這個例子中,我會堅持使用傳統詞典,因爲我覺得在探索圖書館之前熟悉語言的基本知識非常重要。

讓我們繼續步驟2:

for word in L: 
     length = len(word) 

對於列表中的每一句話,我們賦予變量length當前單詞的長度。讓我們來看看如果計數器已經爲我們的長槽:

 if length not in lengths: 
      lengths[length] = 0 

如果沒有遇到長度length的話,我們分配該插槽和我們設置爲零。我們終於可以執行步驟3:

 lengths[length] += 1 

最後,我們遞增字的計數器,用1單位的當前長度。

在該函數結束時,您會發現lengths將包含字長爲的地圖 - >該長度爲的字數。讓我們驗證通過打印其內容(第4步):

for length, counter in lengths.items(): 
     print "Words of length %d: %d" % (length, counter) 

如果您複製並粘貼我寫的代碼(尊重縮進!)你會得到你所需要的答案。

我強烈建議你通過Python tutorial

4

由於這是功課,我會在這裏發表簡短的解決方案,並把它作爲鍛鍊弄清楚它做什麼,以及爲什麼它的工作原理:)

>>> from collections import Counter 
>>> text = open("sample.txt").read() 
>>> counts = Counter([len(word.strip('?!,.')) for word in text.split()]) 
>>> counts[3] 
7 
0

的正則表達式庫也可能會有所幫助,如果有點矯枉過正。一個簡單的詞匹配重可能是這樣的:

import re 
f = open("sample.txt") 
text = f.read() 
words = re.findall("\w+", text) 

詞是那麼的列表...話:)

然而,這將無法正常匹配的話就像「不是」和「我」 m',因爲\ w只匹配字母數字。本着這種作業的精神,我想我會離開感興趣的讀者,但Python Regular Expression文檔是一個很好的開始。

然後我通過長度計算這些話的方法是這樣的:

occurrence = dict() 
for word in words: 
    try: 
     occurrence[len(word)] = occurrence[len(word)] + 1 
    except KeyError: 
     occurrence[len(word)] = 1 
print occurrence.items() 

凡詞典(發生)用於存儲字長和它們在你的文字出現。 try:和except:關鍵字處理的是我們第一次嘗試在字典中存儲特定長度的單詞,在這種情況下,字典不會被要求檢索不知道的東西,除此之外:拾取作爲結果拋出的異常並存儲該單詞長度的第一次出現。最後一行打印字典中的所有內容。

希望這有助於:)

0

也許也是這個:

>>> s 
'This is a test file. How many words are of length one? How many words are of length three? We should figure it out! Can a function do this?' 
>>> {x:[len([c for c in w ]) for w in s.split()].count(x) for x in [len([c for c in w ]) for w in s.split()] } 
{1: 2, 2: 6, 3: 5, 4: 6, 5: 4, 6: 5, 8: 1}