从ThinkPython进行此练习,并想做一些额外的工作,尝试修改练习功能(避免)以反复提示用户,并执行计算以查找文本文件(fin)中有多少个单词包含输入的用户字母(避免提示)。它是第一次使用,但在提示用户再次输入后,总是返回0个单词的答案。
感觉最有可能出现的问题是我误解了如何在这种情况下使用while循环,因为它是第一次工作,但此后不会工作。有更好的方法吗?
fin = open('[location of text file here]')
line = fin.readline()
word = line.strip()
def avoid(word, forbidden):
for letter in word:
if letter in forbidden:
return False
return True
def avoidprompt():
while(True):
n = 0
forbidden = input('gimmie some letters n Ill tell u how many words have em. \n')
for line in fin:
if avoid(line, forbidden) == False:
n = n+1
print('\n There are ' + str(n) + " words with those letters. \n")
答案 0 :(得分:2)
打开文件并执行for line in file
时,您已经消耗了整个文件。
有两种简单的解决方案:
1)通过执行while(True)
fin.seek(0)
循环的每个迭代中返回文件的开头。
2)只需将文件内容存储在列表中即可,方法是将脚本的第一行替换为fin = open('file.txt').readlines()
答案 1 :(得分:0)
我相信您需要按照以下步骤做些事情:
def avoidprompt():
while(True):
n = 0
fin.seek(0)
forbidden = input('gimmie some letters n Ill tell u how many words have em. \n')
for line in fin:
if avoid(line, forbidden) == False:
n = n+1
print('\n There are ' + str(n) + " words with those letters. \n")
Seek
将指针设置回打开的文件中的特定行,并且由于您一次无意地遍历了文件,因此需要将光标移回文件的顶部才能重新读取单词>
您可以看到其他堆栈溢出以获取更多详细信息here
希望这会有所帮助!您使用循环就好了