嘿,我的问题非常基本,而我正在表达中玩耍
3和3%3 == False返回True
BUT
0和0%3 == False返回0
使用其他数字而不是0时,结果为True或False,但从不为0.
我想知道什么使得0如此特别。
答案 0 :(得分:1)
从所有整数中,0是唯一被评估为False
的整数。事实上,False
的值为0(您可以尝试print False + 0
) - 因此您获得了第二个表达式的结果(X % Y == Z
,即{{1} } / True
)。
任何其他整数和第一个参数是返回的内容(False
),因为int
停止并返回第一个表达式false-y表达式(一旦你点击一个{没有必要继续) {1}} and
表达式中的{1}}。下一个表达式是什么并不重要,因为它甚至从未被评估过。
答案 1 :(得分:0)
首先,3%3
等于0
。接下来,bool
是int
的子类,0==False
和1==True
。然后,您有3 and 3%3==False
,3 and 0==False
,即3 and True
。
所以现在让我们采用短路方式:使用and
,如果第一个值为false,则返回第一个值。如果第一个值是真实的,则返回第二个值。由于3
是真实的,它会返回第二个值True
。
3 and 3%3==False
3 and 0==False
3 and True
^ truthy
3 and True
^ returned
对于下一个0%3
,0
与前一个0
相同,结果相同。但是,第一个值and
是一个假值,因此,由于它与0
结合,因此会返回第一个值0 and 0%3==False
0 and 0==False
0 and True
^ falsey
0 and True
^ returned
。
public void button1_Click(object sender, EventArgs e)
{
try
{
dataGridView1.DataSource = GetRESTData("http://localhost:55495/EventService.svc/GetAllEvents");
}
catch (WebException webex)
{
MessageBox.Show("Es gab so ein Schlamassel! ({0})", webex.Message);
}
}
private JArray GetRESTData(string uri)
{
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
var webResponse = (HttpWebResponse)webRequest.GetResponse();
var reader = new StreamReader(webResponse.GetResponseStream());
string s = reader.ReadToEnd();
return JsonConvert.DeserializeObject<JArray>(s);
}
答案 2 :(得分:0)
TLDR: Python中的布尔运算符求值为明确确定其值的第一个值。
所以,让我们看3 and 3 % 3 == False
,这相当于3 and ((3 % 3) == False)
。仅当两个值的布尔值均为and
时,True
表达式的布尔值为True
;否则它的布尔值为False
。首先,它检查3
,返回3
,其布尔值为True
(bool(3)
为True
)。然后它检查(3 % 3) == False
,返回True
,当然它的布尔值为True
。既然and
的右侧也显示布尔值为True
,那么&#39;返回&#39;通过and
表达式。
0 and 0 % 3 == False
返回0
的原因是因为首先检查and
表达式中的第一个值。由于第一个值为0
,其布尔值为False
,因此无需检查and
表达式的其余部分。因此0
表达式会返回and
。
这里有一些代码:
>>> x = 5 or 3
>>> print(x)
5
>>>
>>> y = 0 and 7
>>> print(y)
0
>>>
>>> z = 1 and 7
>>> print(z)
7