【问题标题】:python if statement not filtering out the casespython if语句没有过滤掉案例
【发布时间】:2021-07-25 11:32:25
【问题描述】:

所以我有一个字符字典和他们的昵称。

namedict = {"Harry Potter": ["Harry","Harry Potter"]}

我想写一个函数来检测名字是否出现在句子中,如果存在,角色的情绪状态是什么。

import text2emotion as te

def emotion(character, text):
    with open(text,'r') as f:
        for name, nickname in namedict.items():
            if character in name:
                print(str(character)+"\n")
                line = 1
                for lines in f:  
                    if (alias in lines for alias in nickname):
                        print("line "+str(line))
                        print(te.get_emotion(line))
                        line += 1
            else:
                print("character not found")

当我用我的文本文件运行代码时,它只返回每一行,显然它没有从循环中获取名称列表中不存在的字符。

text sample and result

【问题讨论】:

  • 这是一个简单的课程小组项目,所以我们会忽略情绪数据是否来自角色。
  • lte 定义在哪里?它们是全局变量吗?
  • if character in name 不对。 character 应该在这里是什么?您在寻找单个字符吗?如果是这样,那么你根本不需要for 语句,只需要if character in namedict:,但这里没有任何东西在看text。函数的目的是什么?
  • 您打开文件一次,然后enumerate()ing 多次。每次在第一次之后都会产生零行,因为文件位置将在文件的末尾 - 没有什么比这点要多读的了。
  • 可能首先使用print() 来查看变量中的值以及执行了哪部分代码。它被称为'print debuging'

标签: python if-statement text


【解决方案1】:

当文件读取所有行时 - for lines in f: - 然后它会在最后停止并且没有什么可读取的。它不知道您想再次阅读所有行。但是您尝试再次阅读所有行以获取下一个名称。

我看到了三个解决方案:

第一:

您必须从头开始通知您要读取的文件 - f.seek(0)
(最终您可以关闭文件并再次打开它,但这很浪费时间)

      for name, nickname in namedict.items():           
          # ... code ...

          f.seek()   # move to beginning of file to read lines again

          for lines in f:  
              # ... code... 

第二:

首先读取所有行以在内存中列出

      all_lines = f.readlines()

      for name, nickname in namedict.items():           
          # ... code ...

          for lines in all_lines:  
              # ... code... 

第三:

您必须更改for-loops 的顺序才能仅读取所有行一次

      for lines in f:  
          # ... code... 

          for name, nickname in namedict.items():           
               # ... code ...

【讨论】:

    猜你喜欢
    • 2018-12-13
    • 2014-12-03
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多