与0相比的例外情况

时间:2015-08-10 22:40:45

标签: python python-3.x numbers boolean zero

嘿,我的问题非常基本,而我正在表达中玩耍

3和3%3 == False返回True

BUT

0和0%3 == False返回0

使用其他数字而不是0时,结果为True或False,但从不为0.

我想知道什么使得0如此特别。

3 个答案:

答案 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。接下来,boolint的子类,0==False1==True。然后,您有3 and 3%3==False3 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%30与前一个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,其布尔值为Truebool(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