以下代码显示了一个错误:
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的答案。