Python 2.7 if / elif语句带或

时间:2016-01-06 01:01:01

标签: python if-statement boolean-logic

我对python很新,所以我确定我做错了什么。我正在定义一个接受字符串变量的函数。我不能确定变量究竟是什么,但是我想要测试的是3个值,如果找到值则只返回一个字符串。如果找不到这些值,我只想返回“未知”。这是我的代码:

def item_priority(cell_color):
  if cell_color == 'green' or 'yellow':
    return 'low'
  elif cell_color == 'red':
    return 'high'
  else:
    return 'unknown'

然后我尝试执行:

>> item_priority('orange')

python返回:

'low'

我希望看到的结果将是“未知的”。即使我使用" item_priority(' red')"进行测试,它仍会返回' low'。到目前为止,我在这个网站上找到的唯一解释涉及的代码比我的更复杂。

我尝试过更换第二个'如果'与'elif'但我的结果还是一样的。我不确定我在这里做错了什么。任何帮助是极大的赞赏。谢谢!

4 个答案:

答案 0 :(得分:1)

问题出在行if cell_color == 'green' or 'yellow':上。您打算评估颜色是green还是yellow,但这不是or在这里工作的方式

简单来说,当您在Python中拥有类似LEFT or RIGHT的代码时,将首先对LEFTRIGHT表达式进行求值。您的情况就是这样

  1. LEFTcell_color == 'green,而RIGHTyellow
  2. 当您通过"red"作为颜色时,LEFT的值为false
  3. 由于LEFT表达式为False,因此将评估RIGHT
  4. 将字符串作为RIGHT表达式,其结果为True
  5. False or True的值为True,因此if变为true,并且打印了"low"

要记住的重要一点是,当您使用期望布尔值的非空字符串时,它的值为True

>>> bool("")
False
>>> bool("abc")
True

所以错误的行应该变成if cell_color == 'green' or cell_color == 'yellow':


编辑:看到您对另一个答案的评论,您似乎想检查多种颜色。在这种情况下,您可以使用内置的any()函数,该函数检查传递给它的iterable的值是否为true。

def item_priority(cell_color):
    low_colors = ["green", "yellow", "..."]
    if any(cell_color == color for color in low_colors):
        return "low"

答案 1 :(得分:0)

'yellow'始终在if条件中评估True,因此该代码块始终与您传入的内容一起执行。您需要将or cell_color == 'yellow'添加到第2行

答案 2 :(得分:0)

将您的值放入数组中 - 然后对其进行测试:

validColors = ["red", "black", "blue", "yellow"]
color = "red"

if color in validColors:
    print("Found it")
else:
    print("Not found")

或者,更符合您的代码:

def item_priority(cell_color):
  lowColors = ["green", "yellow"]
  highColors = ["red"]

  if cell_color in lowColors:
    return 'low'
  elif cell_color in highColors:
    return 'high'
  else:
    return 'unknown'

字典方法:

def item_priority(cell_color):
  colors = {}
  colors["high"] = ["red"]
  colors["low"] = ["green", "yellow"]

  if cell_color in colors["low"]:
    return 'low'
  elif cell_color in colors["high"]:
    return 'high'
  else:
    return 'unknown'

答案 3 :(得分:0)

def item_priority(cell_color):
    if cell_color == 'green' or cell_color == 'yellow' :
        return 'low'
    elif cell_color == 'red' :
        return 'high'
    else:
        return 'unknown'
item_priority('Orange')