2016-07-06 92 views
0

我有以下功能,第二個功能count_forbid(a)只能工作1次。在這個例子中,它計算了不包含字母'c'的單詞的正確值,但是對於y它返回零。因此,這意味着代碼只能做正確的第一次和所有其他的時間就返回零:功能僅在第一次調用時才正常工作

import string 
fin = open('words.txt') 
def forbid_or_not(word,forb): 
    for letter in word: 
     if letter in forb: 
      return False 
    return True 

def count_forbid(a): 
    count = 0 
    for line in fin: 
     word1 = line.strip() 
     if forbid_or_not(word1,a): 
      count += 1 
    return count 

x = count_forbid('c') 
y = count_forbid('d') 

回答

4

後您通過與文件迭代:

for line in fin: 

這是要到達終點並試圖重新執行將不起作用。

要麼改變功能使用context manager是重新打開該文件時被調用的函數:

def count_forbid(a): 
    count = 0 
    with open('words.txt') as fin: # closes the file automatically 
     for line in fin: 
      word1 = line.strip() 
      if forbid_or_not(word1,a): 
       count += 1 
    return count 

在Python裏打開文件的首選方式。

或者,添加您的通話之間fin.seek(0),以獲取該文件指向開頭:

x = count_forbid('c') 
fin.seek(0) 
y = count_forbid('d') 
+0

而不是使用情況管理器,你也只是「手動」開放,並可以關閉該文件。 – syntonym

+1

當然,但這依賴於您保持警惕並始終記得關閉它的事實。這就是爲什麼上下文管理者是一個非常好的構造,他們爲你做這件事,讓你擔心更重要的事情:-)。 –

+0

哇,超級有效,非常感謝。 –

相關問題