2017-04-05 42 views
1

爲什麼數字和總長度仍然是0?我究竟做錯了什麼。它應該到期行聲明已經改爲線路這個程序有什麼問題?爲什麼數字和totalLength 0?

def cleanedup(s): 
    alphabet= 'abcdefghijklmnopqrstuvwxyz' 
    cleantext = '' 
    for character in s.lower(): 
     if character in alphabet: 
      cleantext += character 
    else: 
      cleantext = ' ' 
    return cleantext 

import shelve 

shelf = shelve.open('books') 
lines = shelf['Pride and Prejudice'] 
shelf.close() 

number = 0 
totalLength = 0 

for line in lines: 
    for word in cleanedup(line).split(): 
     number += 1 
     totalLength += len(word) 

print(totalLength, number) 
+2

什麼是「線條」和「cleanedup」?如果你沒有向我們展示所有的代碼,我們應該如何知道你的代碼在做什麼? – jwodder

+0

什麼是'線條'和'cleanedup'?請創建一個[最小測試用例](http://stackoverflow.com/help/mcve)。 –

+0

我編輯了它..... –

回答

4

這是主要的問題,你的腳本:

 for character in s.lower(): 
      ... 
     else: 
      cleantext = ' ' 

我不知道這是爲else正確的位置,你的情況你已經把它放在for循環之後,所以cleantext將被重置每次你運行這個函數時因爲你的for循環裏面沒有break聲明。 More info on for ... else ...


雖然這可能不是你想要的(問題是有點不清楚),下面的代碼工作:

def cleanedup(s): 
    alphabet= 'abcdefghijklmnopqrstuvwxyz' 
    cleantext = '' 
    for character in s.lower(): 
     if character in alphabet: 
      cleantext += character 
    return cleantext 


lines = ['lorem ipsum dolor sin amet', 'foo bar'] 

number = 0 
totalLength = 0 
for line in lines: 
    for word in cleanedup(line).split(): 
     number += 1 
     totalLength += len(word) 

print(totalLength, number) 

輸出:

>>> 28 2 # 28 = total number of characters, 2 = total number of lines 

PS:下一次,提供一個更簡潔的示例來演示問題,而不是使用外部文件。

+0

我認爲它的缺少導入urllib.request的地方。我試圖訪問的線是網絡上的驕傲和偏見,從網上獲得總長度和數字 –

+2

..這是一個完全不同的問題。如果你在使用'urllib'時遇到問題,那麼你應該發表另外一個問題,並且要更加清楚。在這裏,計數功能有一些問題,但是如果這不是你的主要問題,那麼創建另一個問題,更確切地說,添加一些示例代碼來解決你想要解決的問題,並添加一個錯誤追溯。這樣,您將有更多機會獲得您實際需要的解決方案。另一方面,如果你認爲這個答案提高了你的計數功能,如果你接受它,我會很高興:) – TrakJohnson

+0

如何接受你的答案?金星? –