2016-09-26 70 views
0

我正在嘗試編寫一個程序來讀取文本文檔並輸出文檔中最長的單詞。如果有多個最長的單詞(即全部長度相等),那麼我需要按照它們出現的相同順序輸出它們。例如,如果最長的詞是狗和貓你的代碼應該產生:如何從文本文檔中選擇相等的最大長度的文字

狗貓

我無法找出如何選擇等於最大長度的衆多詞,並打印出來。這是據我已經得到了,我只是努力想如何選擇具有相等的最大長度的所有字:

打開文件進行讀取

fh = open('poem.txt', 'r') 

longestlist = [] 
longestword = '' 

for line in fh: 
    words = (line.strip().split(' ')) 
    for word in words: 
     word = ''.join(c for c in word if c.isalpha()) 
     if len(word) > (longestword): 
      longest.append(word) 

for i in longestlist: 
    print i 
+0

不應該'longestword'是一個整數?而且每次找到更長的單詞時都需要更新它。 – afsafzal

+0

想想你的支票:如果長度相等,將這個詞添加到最長的列表。如果單詞的長度大於最長單詞的長度,那麼你有一個新的最長的單詞,所以你應該擦除你的舊單子並創建一個包含新單詞的新單子。 –

回答

1

好吧,首先,您應該使用withas聲明,它只是簡化了一些事情,並確保您不會搞砸。所以

fh = open('poem.txt', 'r')

成爲

with open('poem.txt','r') as file:

既然你只是關心的話,你還不如用一個內置的自啓動:

words = file.read().split() 

然後你只需設置一個最大字長(初始化爲0)的計數器和一個空列表。如果單詞已經超過了最大長度,請設置一個新的最大長度並重寫該列表以僅包含該單詞。如果它等於最大長度,請將其包括在列表中。然後打印出列表成員。如果你想包含一些支票,如.isalpha(),請隨意將其放入代碼的相關部分。

maxlength = 0 
longestlist = [] 
for word in words: 
    if len(word) > maxlength: 
     maxlength = len(word) 
     longestlist = [word] 
    elif len(word) == maxlength: 
     longestlist.append(word) 
for item in longestlist: 
    print item 

-MLP

0

你需要做的是保留迄今爲止所見最長的單詞列表,並保留最長的單詞。例如,如果迄今爲止最長的單詞長度爲5,那麼您將擁有一個包含5個字符的所有單詞列表。只要您看到一個包含6個或更多字符的單詞,就會清除該列表,只將該單詞放入該單詞中,並更新最長的單詞。如果您訪問了長度與最長相同的單詞,則應將它們添加到列表中。

P.S.我沒有把代碼放到你自己手中。

相關問題