为什么我的 Python 代码没有正确计算布尔值?

Why is my Python code not evaluating booleans correctly?

我是 Python 的初学者,我在 YouTube 上看到了 Cory Schafer 关于布尔值和条件的教程。当他试图显示 Python 认为哪些值是 False 时,他有一段话。他一个一个地测试它们,但我想知道是否有更多 efficient/fun 的方法来做到这一点,所以我尝试想出这个 for 循环语句。我期望输出为 8 行 Evaluated to False,但我一直得到 Evaluated to True。有人可以启发我吗?谢谢!

condition = (False, None, 0, 0.00, '', (), [], {})

for i in condition:
    if condition:    # It is assumed that condition == true here, right? 
        print('Evaluated to True')
    else:
        print('Evaluated to False ')

#OUT: 
Evaluated to True
Evaluated to True
Evaluated to True
Evaluated to True
Evaluated to True
Evaluated to True
Evaluated to True
Evaluated to True

if condition 更改为 if i。您想要测试从 condition 元组中提取的每个单独项目,而不是测试整个元组 8 次。

更清晰的命名可以避免这个问题。我建议始终为集合提供复数名称,并在末尾添加 s。那你可以这样写,这样读起来更自然:

conditions = (False, None, 0, 0.00, '', (), [], {})

for condition in conditions:
    if condition:    # It is assumed that condition == true here, right? 
        print('Evaluated to True')
    else:
        print('Evaluated to False ')

小心!您正在评估完整的元组,每次在您的循环中(因此,评估同一个对象)而不是单个项目。此外,您得到的是 True,因为非空的 lists/tuples/dictionaries 将始终评估为 True,与评估为 False 的空的相比,正如您在最后 3 次迭代中看到的那样。

你应该在评估为 i 而不是 condition 时更改行:

condition = (False, None, 0, 0.00, '', (), [], {})

for i in condition:
    if i: 
        print('Evaluated to True')
    else:
        print('Evaluated to False')

这理所当然 returns:

Evaluated to False 
Evaluated to False 
Evaluated to False 
Evaluated to False 
Evaluated to False 
Evaluated to False 
Evaluated to False 
Evaluated to False 

在 if 语句中将条件替换为 i

condition = (False, None, 0, 0.00, '', (), [], {})

for i in condition:
    if condition:
        print("Evaluated to True")
    else:
        print("Evaluated to False")