真实性测试未按预期进行

2024-09-19 23:43:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我测试了1==True(output:True),1==False(False),connection是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正在传递一个1或0,type(connection)将其定义为int


Tags: 函数用户功能falsetrueforoutputif
1条回答
网友
1楼 · 发布于 2024-09-19 23:43:57

您的错误是查看connection is True。这总是Falseistests for identity,两个表达式导致对内存中同一对象的引用

如果要打印对象的真值,请使用^{} function

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

1 == True之所以有效,是因为在Python中,bool类型是int的子类:

>>> issubclass(bool, int)
True

True的整数值是1,False的整数值是0。相等性测试对其他整数值无效:

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

注意你的if测试在其他方面是没有意义的;唯一要执行或不执行的是player行,这是一个no-op表达式,它只返回对player的引用,但由于没有其他引用,因此引用未被使用

如果希望print语句仅在if为true时执行,则需要将其缩进到if右侧,并使其成为嵌套块的一部分:

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

然后只打印播放器a的内容:

>>> def validplayers(players):
...     for player, connection in players:
...         if connection:
...             print player, connection, bool(connection)
...
>>> validplayers([('a', 1), ('b', 0)])
a 1 True

相关问题 更多 >