【问题标题】:What is the correct way to use "or" with if condition in python在python中使用“或”与i​​f条件的正确方法是什么
【发布时间】:2017-05-11 05:47:45
【问题描述】:

我写了一段代码来获取科学文献,给出的代码如下获取“xml”文件并从大文件中提取所需的数据或行。

从这个文件中,我想打印两行包含标签“AbstractText”或“Title”,当我使用“AbstractText”或“Title”和“if”时,它会打印出理想的输出,但是当我同时使用带有“或”语句代码的标签开始打印所有行。

没有正确运行的代码:

  def fetch_abstract(pmid):
        handle = efetch(db='pubmed', id=pmid, retmode='xml')
        lines = handle.readlines()

        for line in lines:
            if  "<AbstractText>" or "<Title>" in line:
                print line,

    fetch_abstract("19555725")

代码使用“AbstractText”标签正确运行:

  def fetch_abstract(pmid):
        handle = efetch(db='pubmed', id=pmid, retmode='xml')
        lines = handle.readlines()

        for line in lines:
            if  "<AbstractText>" in line:
                print line,

    fetch_abstract("19555725")

带有“标题”标签的代码运行正常:

  def fetch_abstract(pmid):
        handle = efetch(db='pubmed', id=pmid, retmode='xml')
        lines = handle.readlines()

        for line in lines:
            if   "<Title>" in line:
                print line,

    fetch_abstract("19555725")

我该如何解决这个问题?

【问题讨论】:

标签: python


【解决方案1】:

你应该把你的条件用in line 表示:

if  "<AbstractText>" in line or "<Title>" in line:

你现在放的方式有以下两个条件:

"<AbstractText>" or
"<Title>" in line

并且"&lt;AbstractText&gt;" 始终为true,因为string "&lt;AbstractText&gt;" 包含某些内容(if "nonemptystring" 始终为true)。这就是您打印所有内容的原因。

【讨论】:

    【解决方案2】:

    一种正确的写法是:

    if "<AbstractText>" in line or "<Title>" in line:
    

    您的第一次尝试等同于if ("&lt;AbstractText&gt;") or ("&lt;Title&gt;" in line):。我添加了括号以强调如何解释该行。

    【讨论】:

      【解决方案3】:

      代替

      if  "<AbstractText>" or "<Title>" in line:
      

      使用

      if  "<AbstractText>" in line or "<Title>" in line:
      

      【讨论】:

        【解决方案4】:

        编辑:修正语法错误 试试这个:

        def fetch_abstract(pmid):
            handle = efetch(db='pubmed', id=pmid, retmode='xml')
            lines = handle.readlines()
        
            for line in lines:
                if  "<AbstractText>" in line or "<Title>" in line:
                    print line,
        
        fetch_abstract("19555725")
        

        【讨论】:

        • 这是一个语法错误。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-03
        • 1970-01-01
        • 2016-11-28
        • 2023-03-09
        • 1970-01-01
        • 2013-06-27
        相关资源
        最近更新 更多