使用"或"在评估整数

时间:2016-03-22 14:13:13

标签: python

问题"给定2个整数,a和b,如果一个是10,或者它们的总和是10,则返回True。"

在第一次测试中,为什么输入(9,9)和(8,3)会返回True?

我已经使用不同的解决方案解决了这个问题(下面进一步说明),但我很难理解为什么第一个解决方案不起作用,因为当整数都不是10时,它们在求和时都等于10!

感谢您的帮助。

def makes10(a, b):                                        

    if a or b == 10:
        return True

    if a + b == 10:
        return True

    else:
        return False

def makes10(a, b):

    if a == 10:
        return True

    if b == 10:
        return True

    if a + b == 10:
        return True

    else:
        return False

5 个答案:

答案 0 :(得分:3)

它说a or b == 10,因为a是真的,即不为零,它返回true。

答案 1 :(得分:1)

因为:

if a or b == 10:

执行等同于

temp = (a or b)
if (temp == 10):

你可以针对单个固定值测试多个值。您必须单独测试每个,例如如果你有

if (a == 10) or (b == 10):
该声明本来有用。阅读文档:https://docs.python.org/3/reference/expressions.html#operator-precedence

答案 2 :(得分:1)

a or b == 10

评估为True,a评估为True

你必须写

(a == 10) or (b == 10)

答案 3 :(得分:1)

if a or b == 10:

这不符合你的想法。它将被评估为:

if (a) or (b == 10):

你最想要的是:

if a == 10 or b == 10:

答案 4 :(得分:1)

a or b == 10

这将首先在布尔表达式的上下文中计算a,如果这是真的,则整个表达式都是正确的。如果为false,则会评估b == 10。它与a == 10 or b == 10不同。

或者,您只需说

if 10 in [a, b]:

这也将做你想要完成的事情。