奇怪的布尔表达式

问题描述 投票:0回答:1

我正在尝试调试(重写?)别人的 Python/cherrypy Web 应用程序,我遇到了以下“if”语句:

if not filename.endswith(".dat") and (
    filename.endswith(".dat") or not filename.endswith(".cup")
):
    raise RuntimeError(
        "Waypoint file {} has an unsupported format.".format(
            waypoint_file.filename
        )
    )

我认为这与:

if not A and (A or not B):

如果是这样,那么:

  • 如果

    A = False
    ,则减少为
    if True and (False or not B):

    • if True and not B
      =
      not B
  • 如果

    A = True
    ,那么它会减少为
    if False:
    ,即
    if
    块永远不会执行

我很确定

if
块的目的是警告用户相关文件的扩展名既不是
.DAT
也不是
.CUP
,但在我看来它实际上并不执行那个意图。

我认为

if
块应该是:

if(not .DAT and not .CUP) = if not(.DAT or .CUP)

正确吗?

python boolean-expression
1个回答
-1
投票

据我所知,要使第二个表达式与该陈述相关,第一个表达式

Not A

必须是真的。因此,A 为假。

因此,第二条语句如下所示:

False Or Not B

对于第二个陈述也为真,因此 B 必须为假。

所以这是一种复杂的说法,

Not A and Not B

,根据德摩根定律意味着非(A或B)

© www.soinside.com 2019 - 2024. All rights reserved.