多个if条件

met*_*ddy 0 python if-statement

你能告诉我为什么这段代码:

if (x and y) and z > 0:
    return True
Run Code Online (Sandbox Code Playgroud)

是不一样的:

if (x and y) > 0 < z:
    return True
Run Code Online (Sandbox Code Playgroud)

基本上,为什么我不能链接几个变量,如:

if var1 and var2 and var3 and var4 > 0:
    do_this
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

--edit-- 我想我只想知道如何在不写作的情况下缩短条件:

if var1 > 0 and var2 > 0 and var3 > 0
Run Code Online (Sandbox Code Playgroud)

特别是如果条件很长,如:

if var1 > (pow(x, 3) / 2.5*pow(y,0.5)+x*y)
Run Code Online (Sandbox Code Playgroud)

如果重写每个变量的条件是不可行的,想象一下我是否有10个变量.或者有没有更好的方法,我没有看到可以在这样的情况下使用?谢谢你的回答!

Ósc*_*pez 5

这不是你想象的那样:

if (x and y) > 0 < z: return True
Run Code Online (Sandbox Code Playgroud)

以上评估(x and y)首先,如果两者都是真实的,那么y返回,所以现在我们有:

if y > 0 < z: return True
Run Code Online (Sandbox Code Playgroud)

这与以下相同:

if y > 0 and 0 < z
Run Code Online (Sandbox Code Playgroud)

显然,以上与其他表达方式不同:

if (x and y) and z > 0: return True
if y and z > 0:
if z > 0:
Run Code Online (Sandbox Code Playgroud)

底线:(x and y) > 0绝对不会做你的想象!你想说的必须写成这样:

 if x > 0 and y > 0 and z > 0: return True
Run Code Online (Sandbox Code Playgroud)