-2

我有一个简单的函数,可以测试元组中的一个项目,看看它是否真实。出于某种原因,所有测试都返回 True ( ...if connection:...),即使被测试的值是 1(假定为 True)或 0(假定为 false)。

我测试了是否 1 == True(输出:True),1 == False(False),连接是否为 True(False)只是为了尝试了解发生了什么。

用户输入:players = [('a', 1), ('b', 0)]

功能:

def validplayers(players):
    for player, connection in players:
        if connection:
            player
        print player, connection, 1 == True, 1 == False, connection is True

输出:

a 1 True False False
b 0 True False False

connectionvar 传递type(connection)定义为 int的1 或 0。

4

1 回答 1

3

您的错误正在查看connection is True. 这将永远是False身份is 测试,两个表达式导致对内存中同一对象的引用。

如果要打印对象的真值,请使用bool()函数

>>> bool(1)
True
>>> bool(0)
False

1 == True完全有效是因为在 Python 中,bool类型是 的子类int

>>> issubclass(bool, int)
True

的整数值为True1,False整数值为0。测试相等性不适用于其他整数值:

>>> 1 == True
True
>>> 2 == True
False
>>> bool(2)
True

请注意,您的if测试在其他方面毫无意义;唯一执行与否的是 line player,它是一个无操作表达式,只返回对 的引用player,但由于没有其他内容,所以引用未使用。

如果您希望该print语句仅在if为真时执行,您需要将其缩进到更靠右的位置if并使其成为嵌套块的一部分:

def validplayers(players):
    for player, connection in players:
        if connection:
            print player, connection, bool(connection)

这只会为 player 打印一些东西a

>>> def validplayers(players):
...     for player, connection in players:
...         if connection:
...             print player, connection, bool(connection)
...
>>> validplayers([('a', 1), ('b', 0)])
a 1 True
于 2017-04-02T15:28:48.047 回答