以下代码显示了一个错误:

if ((type(varA) or type(varB) ) == type('t')):
    print "string involved"
elif varA<varB:
    print "RANDOM"


错误是在这种情况下:

Test Values: varA = 0, varB = adios


输出:

RANDOM


而另一段代码

if ((type(varA) == type('t')) or (type(varB)== type('t'))):
    print "string involved"
elif varA<varB:
    print "RANDOM"`


对于以下测试值:

Test Values: varA = 6, varB = adios


输出如下:

string involved


这两个“如果”条件之间有什么区别?我发现它们具有相同的逻辑!

最佳答案

问题是这个表达式:

if ((type(varA) or type(varB) ) == type('t')):


编程语言不能像英语那样工作。上面的代码首先评估type(varA) or type(varB),这将产生varA的类型-因为or返回第一个真实值,并且任何类型都是真实的。

然后它将检查是否与type('t')相同-即str。这意味着仅当varA是字符串并且完全忽略varB的类型时,它才为true。

您想要的可能是这样的:

if type(varA) == type('t') or type(varB) == type('t'):


但是还有更多惯用的/ Pythonic的方式可以做到这一点。有关示例,请参见ÓscarLópez的答案。

07-26 02:56