【问题标题】:word Isn't equal to wordlist.readline() even though it isword 不等于 wordlist.readline() 即使它是
【发布时间】:2021-12-29 05:35:16
【问题描述】:

这是我的代码:

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()

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

【问题讨论】:

  • "1080.""1080" 不是一回事。
  • @GreenCloakGuy 我的错,我的意思是把句号放在引号后面。
  • 老兄,您将同一变量 i 用于 2 个不同的任务。将其中一个更改为另一个字母。
  • 代码读取文件有很多问题,可以参考一下教程吗?您还没有关闭文件,并且每个 readline 调用消耗 1 行,因此您实际上跳过了每个备用行。当它打印“not 1080”时,这实际上是1080之前的行的错误

标签: python loops readline


【解决方案1】:

我认为您正在寻找的是:

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()

【讨论】:

    【解决方案2】:

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

    首先,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()
    

    【讨论】:

      猜你喜欢
      • 2021-04-29
      • 2018-10-25
      • 1970-01-01
      • 2023-01-05
      • 2021-07-26
      • 2016-09-25
      • 2013-07-29
      • 2021-04-19
      • 1970-01-01
      相关资源
      最近更新 更多