当第一个值是Fals时PythonEvaluating复合ifstatements

2024-10-01 17:22:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我在if语句中遇到了一些奇怪的行为,我根本不知道发生了什么,尽管很明显我遗漏了一些至少python认为很明显的东西。你知道吗

以下是我的语法:

if not(boolean) & (fogXLeft < float(cols[xCol])) < fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop): 
    print "boolean: " + str(boolean)
    boolean = True

问题是,即使boolean设置为True(因此not(boolean)为False),每次都会输入if语句。(我知道是因为“boolean:True”会被反复打印出来。)但是,当我注释掉结尾部分时,它只是基于bool求值:

if not(boolean): # & (fogXLeft < float(cols[xCol]) < fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop):
    print "boolean: " + str(boolean)
    boolean = True

然后if语句只输入一次(因为boolean从此被设置为True)。你知道吗

我认为问题在于复合比较(尽管我知道这是合法的语法),但这也会在每次迭代中输入if语句:

if not(boolean) & (fogXLeft < float(cols[xCol])): #< fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop):  
    print "boolean: " + str(boolean)
    boolean = True

我错过了什么?我很困惑。你知道吗

谢谢。你知道吗


Tags: trueifnot语句floatprintcolsboolean
2条回答

not是运算符,不是函数。&是优先级高于not的运算符。你知道吗

所以:

if not(boolean) & (fogXLeft < float(cols[xCol])) < fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop):

相当于:

if not ((boolean) & (fogXLeft < float(cols[xCol])) < fogXRight) & (fogYBot < float(cols[yCol]) < fogYTop)):

反过来,如果booleanTrue,则等于:

if not (1 & (fogXLeft < float(cols[xCol])) < fogXRight) & (fogYBot < float(cols[yCol])  < fogYTop)):

如果其他两个比较中的任何一个都失败了,那么这将是正确的。你知道吗

&是位运算符,而不是条件上的and运算符。而是使用and逻辑运算符,而不是按位运算符。你知道吗

相关问题 更多 >

    热门问题