背景: 初学者,通过Think Python工作。
我在:练习9.3。编写一个名为avoid的函数,它接受一个单词和一串禁止字母, 如果单词不使用任何禁用字母,则返回True。 修改程序以提示用户输入禁止字母串然后打印 不包含任何单词的单词数。你能找到5个禁号的组合 排除最少数量的单词?
当我决定尝试编写脚本时,它会回答最后一个问题。 “你能找到排除最少数字的5个禁用字母的组合吗?”
这是我的代码:
fin = open('words.txt')
import itertools
import string
alphabet = string.ascii_lowercase
forbidden = list(itertools.combinations(list(alphabet),5))
def has_no_e(word,letter):
return letter in word
def avoids(word,f_let):
index = 0
while index < len(f_let):
let = f_let[index]
if let in word:
return True
index += 1
return False
def count_word_wdout(f_list):
count = 0
for line in fin:
xword = line.strip()
if avoids(xword,f_list) == False:
count += 1
return count
def max_words_wdout(fob_list):
count = 0
index = 0
for char in fob_list:
ncount = count_word_wdout(char)
if count <= ncount:
count = ncount
print count
max_words_wdout(forbidden)
print count_word_wdout(forbidden[2])
好的就是问题:
使用max_words_wdout(禁止),ncount = count_word_wdout(char)计算第一个索引,但其余的返回为0。
然而 print count_word_wdout(forbidden [2])返回正确的值。
我也用while循环尝试了这个,结果相同。
答案 0 :(得分:0)
您遇到的问题是您的文件fin
存储在全局变量中,并且您正在阅读count_word_wdout
中的所有行。这个工作一次,但在那之后,阅读位置已经到了最后,而且从来没有任何东西可读。
要解决此问题,您需要预先读取整个文件并将其包含的所有单词保存在稍后可以引用的变量中,或者重新打开文件(或者重新开始查找文件)并重新读取每个文件调用时间count_words_wdout
。