Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 理解条件逻辑_Python_Conditional Statements_Boolean Logic - Fatal编程技术网

Python 理解条件逻辑

Python 理解条件逻辑,python,conditional-statements,boolean-logic,Python,Conditional Statements,Boolean Logic,我正在编写一个python程序,它用plan English语言获取给定的句子,并从中提取一些命令。现在非常简单,但我从命令解析器中得到了一些意想不到的结果。在仔细研究之后,我的条件逻辑似乎没有按照我的预期进行评估 当然,这是一种非常不雅观的方式,而且过于冗长。我将完全重新构造它,可能使用神经网络或正则表达式或它们的组合。但在我继续前进之前,我确实想了解这个错误背后的逻辑,因为这是一件非常重要的事情。以下是代码的一部分: if (("workspace" or "screen" or "des

我正在编写一个python程序,它用plan English语言获取给定的句子,并从中提取一些命令。现在非常简单,但我从命令解析器中得到了一些意想不到的结果。在仔细研究之后,我的条件逻辑似乎没有按照我的预期进行评估

当然,这是一种非常不雅观的方式,而且过于冗长。我将完全重新构造它,可能使用神经网络或正则表达式或它们的组合。但在我继续前进之前,我确实想了解这个错误背后的逻辑,因为这是一件非常重要的事情。以下是代码的一部分:

if  (("workspace" or "screen" or "desktop" or "switch")  in command) and 
     (("3" or "three" or "third") in command):
    os.system("xdotool key ctrl+alt+3")
    result = True
奇怪的是,如果命令是desktop three,则正确的计算并执行xdotool行;如果命令是switch three,则不正确;如果命令是switch three,则正确的计算并执行xdotool行;如果命令是switch three,则正确的计算并执行xdotool行;如果命令是switch Th

所以,我的问题是,这里发生了什么?这里的条件流是什么,它是如何评估的?我怎样才能最好地修复它?我有一些想法,比如可能工作空间被计算为总是真的,因为它不与in-command绑定,并且被计算为布尔值,但我想对它有一个真正坚实的理解

谢谢

工作区、屏幕、桌面或开关是一个表达式,它总是计算为工作区

Python的对象具有真值。例如,0、False、[]和为False。or表达式的结果是计算结果为true的第一个表达式。从这个意义上讲,workspace是正确的:它不是空字符串

你可能是说:

"workspace" in command or "screen" in command or "desktop" in command or "switch" in command
这是一种详细的方式来说明@Ashwini Chaudhary使用了什么。

工作区、屏幕、桌面或开关是一个表达式,它总是计算为工作区

Python的对象具有真值。例如,0、False、[]和为False。or表达式的结果是计算结果为true的第一个表达式。从这个意义上讲,workspace是正确的:它不是空字符串

你可能是说:

"workspace" in command or "screen" in command or "desktop" in command or "switch" in command
这是一种详细的方式来说明@Ashwini Chaudhary使用any的目的。

在此处使用any:

布尔或:

x或y等于:如果x为假,则y为假,否则x为假

简而言之:在一系列条件中,选择第一个真值,如果全部为假,则选择最后一个

>>> False or []                     #all falsy values
[]
>>> False or [] or {}               #all falsy values
{}
>>> False or [] or {} or 1          # all falsy values except 1
1
>>> "" or 0 or [] or "foo" or "bar" # "foo" and "bar"  are True values
'foo
由于python中的非空字符串为True,因此您的条件等价于:

("workspace") in command and ("3" in command)
有关以下内容的帮助:

请在此处使用:

布尔或:

x或y等于:如果x为假,则y为假,否则x为假

简而言之:在一系列条件中,选择第一个真值,如果全部为假,则选择最后一个

>>> False or []                     #all falsy values
[]
>>> False or [] or {}               #all falsy values
{}
>>> False or [] or {} or 1          # all falsy values except 1
1
>>> "" or 0 or [] or "foo" or "bar" # "foo" and "bar"  are True values
'foo
由于python中的非空字符串为True,因此您的条件等价于:

("workspace") in command and ("3" in command)
有关以下内容的帮助:


好的,谢谢。为什么工作区、屏幕、桌面或开关计算为工作区?我已经习惯了c/c++编程,所以我使用或作为| |的同义词,但事实并非如此吗?@Nathan我们都试图回答这个问题。现在清楚了吗?花点时间和解释器一起,写一些布尔表达式。是的,很有意义。这与c/c++方式不同,这正是我感到困惑的地方。谢谢在C/C++中,| |返回布尔值。1或0。这里的情况并非如此。但是你的代码即使在C++@Nathan:即使任何代码都像或一样工作,即使truthy或falsey通常都不够好,当你明确想要True或False时,只返回boolwhatever而不是if what:return True else:return False要简单得多。好的,谢谢。为什么工作区、屏幕、桌面或开关计算为工作区?我已经习惯了c/c++编程,所以我使用或作为| |的同义词,但事实并非如此吗?@Nathan我们都试图回答这个问题。现在清楚了吗?花点时间和解释器一起,写一些布尔表达式。是的,很有意义。这与c/c++方式不同,这正是我感到困惑的地方。谢谢在C/C++中,| |返回布尔值。1或0。这里的情况并非如此。但是你的代码即使在C++中也不会工作@Nathan:即使任何代码都像或一样工作,即使truthy或falsey通常不够好,当你明确地想要True或False时,只返回boolwhatever比if whater简单得多:return True else:return False。有一些事情使得这很难理解。首先,为什么额外的父母在3,3,3?看起来你想要一个本身就是元组的值,当然你实际上得到了三个值。此外,不必要的反斜杠延续使其看起来像外部paren已关闭,因为否则反斜杠是不必要的。最后,向右边缩进使它看起来像是在继续其他东西,比如第一个any中的genexp命令中的x。@abarnert我只是在那里太懒了,我现在已经让代码有点可读性了有几件事使这件事成为现实
难以阅读。首先,为什么额外的父母在3,3,3?看起来你想要一个本身就是元组的值,当然你实际上得到了三个值。此外,不必要的反斜杠延续使其看起来像外部paren已关闭,因为否则反斜杠是不必要的。最后,向右边缩进使它看起来像是在继续其他东西,比如第一个any中的genexp命令中的x。@abarnert我只是在那里太懒了,我现在已经让代码有点可读性了