功能仅在第一次调用时才能正常工作

时间:2016-07-06 12:27:28

标签: python function file python-3.x

我有以下功能,第二个功能count_forbid(a)只能工作一次。在此示例中,它计算不包含字母'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')

1 个答案:

答案 0 :(得分: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')