我有以下功能,第二个功能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')
答案 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')