我不明白为什么下面的代码无法正常工作。如果变量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上运行它。
答案 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
会告诉您a
和b
是否都小于零。
答案 2 :(得分:0)
您只评估a
,而不是0
与<{1}}的关系:
if a < 0 and b < 0:
答案 3 :(得分:0)
此:
a and b < 0:
等同于:
(a) and (b < 0):
如果(a)
等于False
,则{p> a
为0
,否则为True
。因此,由于短路b < 0
甚至无法评估。
作为修复,您可以使用all
方法:
all(i < 0 for i in (a, b))