我对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'但我的结果还是一样的。我不确定我在这里做错了什么。任何帮助是极大的赞赏。谢谢!
答案 0 :(得分:1)
问题出在行if cell_color == 'green' or 'yellow':
上。您打算评估颜色是green
还是yellow
,但这不是or
在这里工作的方式
简单来说,当您在Python中拥有类似LEFT or RIGHT
的代码时,将首先对LEFT
和RIGHT
表达式进行求值。您的情况就是这样
LEFT
是cell_color == 'green
,而RIGHT
是yellow
"red"
作为颜色时,LEFT
的值为false
LEFT
表达式为False,因此将评估RIGHT
RIGHT
表达式,其结果为True 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')