带有 or 的 Python 2.7 if / elif 语句

新手上路,请多包涵

我是 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')

蟒蛇返回:

 'low'

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

我尝试将第二个“if”与“elif”互换,但我的结果仍然相同。我不确定我在这里做错了什么。任何帮助是极大的赞赏。谢谢!

原文由 user299331 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 453
1 个回答

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

简单地说,当你有 LEFT or RIGHT 像 python 中的代码时,首先评估 LEFTRIGHT 表达式。在你的情况下,这就是发生的事情

  1. LEFTcell_color == 'greenRIGHTyellow
  2. 当你传递 "red" 作为颜色时, LEFT 计算为 false
  3. 由于 LEFT 表达式为假, RIGHT 被评估
  4. 将字符串作为 RIGHT 表达式,它的计算结果为 True
  5. False or True 评估对 True 又是 if"low"

要记住的重要一点是,当您在需要布尔值的地方使用非空字符串时,它的计算结果为 True

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

所以故障线应该变成 if cell_color == 'green' or cell_color == 'yellow':


编辑: 看到你对另一个答案的评论,你似乎想检查多种颜色。在这种情况下,您可以使用内置的 any() 函数来检查传递给它的可迭代对象的任何值是否计算为真。

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

原文由 Teshan Shanuka J 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题