word 不等于 wordlist.readline() 即使它是

word Isn't equal to wordlist.readline() even though it is

这是我的代码:

wordlist = open('words.txt')

word = input()
i = 0

def loop():
    for i in range(466549):
        if wordlist.readline().strip() == word:
            print(f'found in {i}')
            return
        else:
            print(f"not {wordlist.readline()}")
            i = i + 1
            
loop()

它不仅 return 不是列表的第一个值,而且它也没有说它找到了我的话。我从 GitHub 得到了我的 words.txt 文件,第二个词是“1080”。但是当我把它放进去时,它会打印 'not 1080' 即使它显然是

我想你要找的是:

word = input("enter word: ").strip()

def loop():
    with open("words.txt") as f:
        wordList = f.readlines()
        for i,line in enumerate(wordList):
            line = line.strip()
            if line == word:
                print(f"found in line {i}")
                return
            else:
                print(f"did not find in {line}")


loop()

或者如果你想坚持只使用 readline:

word = input("enter word: ").strip()
wordList = open("words.txt")

def loop():
   for i in range(466549):
       line = wordList.readline().strip()
       if line == word:
          print(f"found in line {i}")
          return
       else:
          print(f"did not find in {line}")


loop()
wordList.close()

也许您想查找文本文件中的特定单词。

首先,wordlist.readline() 实际上从文件中读取了一行,这意味着它 不可重现。所以,print(f"not {wordlist.readline()}") 没有像您预期的那样工作。

例如,假设 words.txt 如下所示。

hello
1080
world

当您在循环中读取带有 if wordlist.readline() ... 的第一行时,该值为“hello”,而这不是 1080,因此 else 语句运行。在这里,你读到第二行 print(f"not {wordlist.readline()}"),即 1080,因此将打印 not 1080

最后,if wordlist.readline() ... 将从文件中读取 world,这也不是 1080,下一个 readline() 将是 None。

第二个问题是变量i没有被正确使用。由于 rangefor 关键字,i 自动递增(严格来说,它只是可迭代对象的下一个值,而不是递增),所以你不需要像 i = 0i = i + 1

第三点是从第一个问题中推导出来的,None.strip()是不可能的,所以会抛出异常。

还有很多话要说,但我只是给你看我的例子,你可以和你的比较

input_wordlist = open('words.txt')
input_word = input()

def loop(word, wordlist):
    for index, line in enumerate(wordlist.readlines()):
        if line.strip() == word:
        # or if you wanna know whether word is in line
        # if word in line:
            print(f"found in {index}")
            return
        else:
            print(f"not in {line}")

loop(input_word, input_wordlist)
input_wordlist.close()