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个变量.或者有没有更好的方法,我没有看到可以在这样的情况下使用?谢谢你的回答!
这不是你想象的那样:
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)