【问题标题】:Multiple IF statements in pythonpython中的多个IF语句
【发布时间】:2017-04-23 06:48:52
【问题描述】:

我正在尝试打印特定单元格中的内容。我知道在将内容提取到输出之前要检查的单元格。我为此使用了多个 IF 语句:

if lineCount == 5:
    if line[0]:
        print line[0], 'A5'
        OPfound = 1
        break
    if line[1]:
        print line[1], 'B5'
        OPfound = 1
        break
if lineCount == 4:
    if line[0]:
        print line[0], 'A4'
        OPfound = 1
        break
    if line[1]:
        print line[1],'B4'
        OPfound = 1
        break

输出的形式是:- 提取的内容,单元格编号

我要做的是首先检查 A5 中是否有任何内容 - 如果有内容则提取它...否则检查 B5 中的内容 - 如果有内容则提取它...否则检查内容在 A4 中

我得到了 B5 和 A4 的输出...但不是 A5

如果 A5、B5 和 A4 中没有内容,我如何检查 B4 中的内容...

【问题讨论】:

  • 请扩展您的代码以包含有关 linelineCount 是什么的信息。此外,您的缩进也很差。
  • 什么是“细胞”?
  • 我希望你的缩进在粘贴时弄乱了,即使它确实有效。
  • 你可以print "A{}".format(linecount),顺便压缩一些代码
  • 您是否对break 的实际作用或if 声明的更多细节进行了研究?

标签: python python-2.7 if-statement


【解决方案1】:

break 不允许您离开 if 子句,如果您确实试图摆脱这种情况。这里的诀窍是删除break 语句并将第二个ifs 替换为elifs,如下所示:

if lineCount == 5:
    if line[0]:
        print line[0],'A5'
        OPfound = 1
    elif line[1]:
        print line[1],'B5'
        OPfound = 1
if lineCount == 4:
    if line[0]:
        print line[0],'A4'
        OPfound = 1
    elif line[1]:
        print line[1],'B4'
        OPfound = 1

这样,如果第一个语句失败,您只会在每个 lineCount 子句中运行第二个 if 语句,而不是每次都运行。

【讨论】:

  • 这给了我几乎我所要求的...但是如果 A5 中有内容我不想读取 A4...现在我正在获得 A4 和 A5 的输出.. . 解决这个问题的方法是什么?
  • @safwan 只需将第二个外部 if 语句设为 elif:例如elif lineCount==4:
  • elif 的意思是,如果之前的 if 或 elif 条件不为真(且仅当它不为真),则检查此条件。 elif 代表 else if。还有else,它涵盖了您未包含的任何条件。将 if 语句放在 if 语句中是一种嵌套形式(嵌套的 if 语句)。
【解决方案2】:

首先,不要以break 结束 Python 代码块。当 Python 看到你已经缩进时,它会结束一个代码块,如下所示:

if condition: //or any other statement that needs a block
    //code goes here
//end of block

break 语句用于终止它可以找到的最内层循环。如果您在循环下运行该代码,break 语句可能会产生一些严重的错误。

无论如何,有一种更传统的方法可以针对多种条件进行测试。您当前没有break 语句的设置应该可以工作,但我建议您使用if...elif...else 语句。格式如下:

if condition:
    //run if true
elif condition:
    //run if first expression was false, and this is true
elif condition:
    //run if second expression was false, and this is true

... (you get the idea)

else:
    //run if all other expressions are false

请记住,当 Python 在这样的语句中找到一个为真的表达式后,它将运行相应的代码块并忽略所有其他块。

希望这会有所帮助!

【讨论】:

    【解决方案3】:

    Darian Moody 在他的blog post 中为这一挑战提供了一个很好的解决方案:

    a = 1
    b = 2
    c = True
    
    rules = [a == 1,
             b == 2,
             c == True]
    
    if all(rules):
        print("Success!")
    

    当给定可迭代对象中的所有元素都为真时,all() 方法返回 True。如果不是,则返回False

    您可以在 python 文档here 和更多信息和示例here 中阅读一点更多信息。

    (我也在这里用这个信息回答了类似的问题 - How to have multiple conditions for one if statement in python

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 2015-09-24
      相关资源
      最近更新 更多