在第一个循环之后,while循环的运行方式有所不同

时间:2019-06-16 23:45:58

标签: python

从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")

2 个答案:

答案 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

希望这会有所帮助!您使用循环就好了