和随机的运算符

时间:2015-05-24 09:57:54

标签: python-3.x logical-operators

我不明白为什么下面的代码无法正常工作。如果变量a和b都是< 0它应该打印两个数字都是负数,否则是最后一条消息。但它只是不工作,我做错了什么?请帮忙!

import random
while True:
    input()
    a=random.randint(-9,9)
    b=random.randint(-9,9)
    print(a,b)
    if a and b < 0:
        print("2 negative numbers:",a,b)
    else:
        print("one or both of the numbers are positive!")

我在python 3.4上运行它。

4 个答案:

答案 0 :(得分:1)

评估两个操作数将解决此问题。这两个操作数都是导致true或false的表达式,所以如果两者都得到true;你会得到你想要的结果。

if ((a < 0) and (b < 0)):

答案 1 :(得分:1)

我认为你对运营商如何分配感到有些困惑。

当你有

if a and b < 0

这并不意味着

if (both a and b) < 0

但是

if (a) and (b < 0)

相当于

if (a != 0) and (b < 0)

因为“所有类型的数字零...评估为假”(见the reference on booleans on docs.python.org

相反,你想要

if a < 0 and b < 0

会告诉您ab是否都小于零。

答案 2 :(得分:0)

您只评估a,而不是0与<{1}}的关系:

if a < 0 and b < 0:

答案 3 :(得分:0)

此:

a and b < 0:

等同于:

(a) and (b < 0):
如果(a)等于False,则{p> a0,否则为True。因此,由于短路b < 0甚至无法评估。

作为修复,您可以使用all方法:

all(i < 0 for i in (a, b))