这是我的代码,当三个数字中只有两个匹配时,它不会返回10。
def green_ticket_value(a, b, c):
if a != b or b != c or a != c:
return 0
elif a == b and a != c or b == c and b != a or a == c and a!= b:
return 0
else: a == b == c
return 20
答案 0 :(得分:1)
首先,第二个"返回0"应该是"返回10"。
其次,(这可能会或可能不会产生影响),您可能需要在elif行中使用括号。
def green_ticket_value(a, b, c):
if a != b or b != c or a != c:
return 0
elif (a == b and a != c) or (b == c and b != a) or (a == c and a!= b):
return 10 # NOT 0
else: a == b == c
return 20
答案 1 :(得分:0)
问题在于第一个if语句逻辑。您使用or
代替and
,这就是您永远不会比较第二个陈述的原因。
假设a=1
b=2
和c=2
在你当前的代码中,确实a!= b是一个有效的语句,它返回0
它应该是:
def green_ticket_value(a, b, c):
if a != b and b != c and a != c:
#rest of code
你也可以使用另一种方法,即使用计数器并返回最常用的值
from collections import Counter
def green_ticket_value(*args):
green = Counter(args)
values = {1:0,2:10,3:20}
return values[green.most_common(1)[0][1]]
答案 2 :(得分:0)
以这种方式思考。如果
a != b or b != c or a != c
是假的,那么
a == b and b == c and a == c
DeMorgan's Laws解释为什么会这样。请记住
~(A \/ B) <-> ~A /\ ~B
~(A /\ B) <-> ~A \/ ~B
<->基本上表示“彼此相同”,~
表示“不”,\/
表示“或”,/\
表示“和”。< / p>
要完成此代码:
def green_ticket_value(a, b, c):
if a != b or b != c or a != c:
return 0
# It can *never* be the case that a != c or a != b at this point
elif a == b and a != c or b == c and b != a or a == c and a!= b:
return 0 // Should this be "return 10"?
# What did you mean to do here?
else: a == b == c
return 20
有点不清楚你的意思是否
a == b and a != c or b == c and b != a or a == c and a!= b
表示
(a == b and a != c) or (b == c and b != a) or (a == c and a!= b)
永远是假的(a == c和a == b,这意味着所有这些条件都是假的),或者以下内容:
a == b and (a != c or b == c) and (b != a or a == c) and a!= b
也总是假的(事实上,它是自我反驳的,因为它包含a == b && a != b
)或者你是否意味着其他变体。我强烈建议在这里使用父母,以便更清楚地了解您要做的事情。
另外,最后一部分:
(b == c and b != a) or (a == c and a != b)
a != b
和b != a
意思完全相同,所以上述陈述与
a != b and (a == c or b == c)