相关疑难解决方法(0)

为什么表达式0 <0 == 0在Python中返回False?

在Python 2.6中查看Queue.py,我发现这个构造我发现有点奇怪:

def full(self):
    """Return True if the queue is full, False otherwise
    (not reliable!)."""
    self.mutex.acquire()
    n = 0 < self.maxsize == self._qsize()
    self.mutex.release()
    return n
Run Code Online (Sandbox Code Playgroud)

如果maxsize为0,则队列永远不会满.

我的问题是它如何适用于这种情况?如何0 < 0 == 0被认为是假的?

>>> 0 < 0 == 0
False
>>> (0) < (0 == 0)
True
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
Run Code Online (Sandbox Code Playgroud)

python

133
推荐指数
5
解决办法
6748
查看次数

为什么`None is None is None`返回True?

今天,在一次采访中,首席技术官问我看起来像一个简单的问题,

这句话的回报是什么?:

None is None is None
Run Code Online (Sandbox Code Playgroud)

我认为Python执行了第一个操作None is None并将返回True.之后,它将比较True is None哪些将返回False.但令我惊讶的是,正确的答案是True.我试图找到这个问题的答案,但经过几天的搜索我没有发现任何东西.有人可以解释为什么会这样吗?

python python-2.7 python-3.x

56
推荐指数
3
解决办法
2115
查看次数

为什么`True == False是False`评估为False?

我在一个表达式上得到一些相当意想不到的行为,==但不能用于is:

>>> (True == False) is False
True
>>> True == (False is False)
True
>>> True == False is False
False
>>> id(True)
8978640
>>> id(False)
8978192
>>> id(True == False)
8978192
>>> id(False is False)
8978640
Run Code Online (Sandbox Code Playgroud)

python

32
推荐指数
3
解决办法
1011
查看次数

为什么`True是False == False`,在Python中是假的?

为什么在使用括号时这些语句按预期工作:

>>> (True is False) == False
True

>>> True is (False == False)
True
Run Code Online (Sandbox Code Playgroud)

但是False当没有括号时它会返回?

>>> True is False == False
False
Run Code Online (Sandbox Code Playgroud)

python python-3.x

29
推荐指数
3
解决办法
2705
查看次数

运算符绑定如何在这个Python示例中工作?

我最近偶然发现了这个表达:

True == False in (False,)
Run Code Online (Sandbox Code Playgroud)

它评估False,但我不明白为什么. True == FalseFalseFalse in (False,)True,所以(对我来说)两者都是合理的可能性

True == (False in (False,))
Run Code Online (Sandbox Code Playgroud)

(True == False) in (False,)
Run Code Online (Sandbox Code Playgroud)

True按照我的预期评估.这里出了什么问题?

python operator-precedence operator-keyword

8
推荐指数
1
解决办法
341
查看次数

Haskell:鼓励GHC推断出正确的中间类型

我认为在Haskell中允许任意链式比较是很好的,所以你可以做简单的范围检查,如:

x <= y < z
Run Code Online (Sandbox Code Playgroud)

还有更复杂的东西

x /= y < z == a
Run Code Online (Sandbox Code Playgroud)

以上两者在语义上等同于

x <= y && y < z
x /= y && y < z && z == a
Run Code Online (Sandbox Code Playgroud)

只是看看我是否可以使语法工作.

所以我在那里使用了几个类型类的大部分方式:

{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
module ChainedOrd where

import Prelude hiding ((<), (<=), (>), (>=), (==), (/=))

class Booly v a where
  truthy :: v -> a
  falsy :: v -> a

instance Booly a Bool where
  truthy = const True
  falsy = const False …
Run Code Online (Sandbox Code Playgroud)

haskell type-inference ghc

7
推荐指数
1
解决办法
263
查看次数

为什么布尔表达式"1 in(1,2,3)== True"为假?

为什么语句在Python中1 in (1, 2, 3) == True返回False?Python中的运算符优先级是不明确的吗?

python boolean-logic operator-precedence

5
推荐指数
1
解决办法
513
查看次数

('ab'中的'a'= = True)评估为False

这是我在摆弄python解释器时得到的

[mohamed@localhost ~]$ python
Python 2.7.5 (default, Apr 10 2015, 08:09:14) 
[GCC 4.8.3 20140911 (Red Hat 4.8.3-7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 'a' in 'abc'
True
>>> 'a' in 'abc' == True
False
>>> 'a' in 'abc' == False
False 
>>> ('a' in 'abc') == True
True
>>> ('a' in 'abc') == False
False


>>> ('a' in 'abc' == True) or ('a' in 'abc' == False)
False
>>> (('a' in 'abc') == True) …
Run Code Online (Sandbox Code Playgroud)

python python-2.x logical-operators

4
推荐指数
1
解决办法
174
查看次数

为什么1在范围(2)== True评估为False?

我遇到了上面的表达,我认为应该评估为True,但事实并非如此.

>> s = 1 in range(2)
>> s == True
>> True
Run Code Online (Sandbox Code Playgroud)

上述声明按预期工作但在以下时间:

1 in range(2) == True
Run Code Online (Sandbox Code Playgroud)

执行时,它的计算结果为False.

尝试寻找答案,但无法得到具体的答案.任何人都可以帮助我理解这种行为吗?

python

4
推荐指数
1
解决办法
135
查看次数

布尔检查不起作用

此代码将成为程序的一部分,该程序将检查数字是否为素数.我知道它不是特别优雅,但我想让它只是为了体验而工作.我认为函数失败了,因为if/elif上的逻辑是错误的,当我运行这段代码时,它似乎只是直接进入else子句.这是一个语法问题,还是我不允许在if子句中进行逻辑检查?

list = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

def find_prime(list, n):
    if n in list == False:
        list.append(n)
        print "I'ts in there now."
    elif n in list == True:
        print "It's in there already."
    else:
        print "Error"

find_prime(list, 3)
find_prime(list, 51)
Run Code Online (Sandbox Code Playgroud)

python list python-2.7

1
推荐指数
1
解决办法
214
查看次数

Unintuitive behavior when comparing large numbers

Just found some unintuitive behavior while competing in Google CodeJam.

input: pow(10, 20) in [pow(10, 20) * 1.0]

output: True
Run Code Online (Sandbox Code Playgroud)

(ok...)

input: pow(10, 30) in [pow(10, 30) * 1.0]

output: False
Run Code Online (Sandbox Code Playgroud)

(???????????)

(so uh, this behavior is dependent on the size of the number?!)

(is this because big Python integers are represented differently behind the scenes?)

input: True == True

output: False
Run Code Online (Sandbox Code Playgroud)

(ok, all is normal)

input: pow(10, 20) in [pow(10, 20) * 1.0] == pow(10, 20) in [pow(10, 20) …
Run Code Online (Sandbox Code Playgroud)

python largenumber boolean floating-accuracy

1
推荐指数
1
解决办法
34
查看次数

为什么我不能只使用51 <= j <= 55?/数据类型

这是关于信用卡问题.因此,如果数字是16位且前两位是51,52,53,54或55,则该卡是万事达卡.

起初,我试过了(51 <= j <= 55).我认为这种情况是有道理的.原因j是整数.但由于某种原因,错误说(51 <= j <= 55)永远是真的(我不明白这一点!).所以我不得不写(j==51 || j==52 || j==53 || j==54 || j==55),这基本上是一样的(51 <= j <= 55).

int j = c / pow(10,14);

if(pow(10,15) <= c < pow(10,16) && (j==51 || j==52 || j==53 || j==54 || j==55)) 
{
    printf("MASTERCARD\n");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好..(我不知道为什么)而且我不得不做一些改动j,从... double jint j.我想这是因为51到55的数字是整数..?

无论如何,错误没有说什么pow(10,15) <= c < pow(10,16).为什么我不能用51 <= j <= 55

c

-3
推荐指数
1
解决办法
121
查看次数