Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:If-else语句_Python_If Statement - Fatal编程技术网

Python:If-else语句

Python:If-else语句,python,if-statement,Python,If Statement,以下代码显示错误: if ((type(varA) or type(varB) ) == type('t')): print "string involved" elif varA<varB: print "RANDOM" 输出: RANDOM 而另一段代码 if ((type(varA) == type('t')) or (type(varB)== type('t'))): print "string involved" elif varA<varB:

以下代码显示错误:

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

RANDOM
而另一段代码

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

string involved
这两个“如果”条件之间有什么区别?我发现他们的逻辑是一样的

这是错误的:

if ((type(varA) or type(varB) ) == type('t')):
应该是:

if type(varA) == str or type(varB) == str:
相当于:

if isinstance(varA, str) or isinstance(varB, str):
或者再短一点:

if str in ((type(varA), type(varB)):
这是错误的:

if ((type(varA) or type(varB) ) == type('t')):
应该是:

if type(varA) == str or type(varB) == str:
相当于:

if isinstance(varA, str) or isinstance(varB, str):
或者再短一点:

if str in ((type(varA), type(varB)):

问题在于这个表达式:

if ((type(varA) or type(varB) ) == type('t')):
编程语言不像英语那样工作。上面首先计算
type(varA)或type(varB)
,这将产生
varA
的类型,因为
返回第一个truthy值,任何类型都是truthy

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

您想要的可能是:

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

但是有更多的惯用/蟒蛇式的方法;有关一些示例,请参见奥斯卡·洛佩斯的答案。

问题在于这个表达式:

if ((type(varA) or type(varB) ) == type('t')):
编程语言不像英语那样工作。上面首先计算
type(varA)或type(varB)
,这将产生
varA
的类型,因为
返回第一个truthy值,任何类型都是truthy

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

您想要的可能是:

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

但是有更多的惯用/蟒蛇式的方法;有关一些示例,请参见Óscar López的答案。

如果您希望测试对
str
的子类同样有效,最好使用
isintance
而不是
type

if any(isinstance(x, str) for x in (varA, varB)):
    ...

如果您希望测试对
str
的子类同样有效,那么最好使用
isintance
而不是
type

if any(isinstance(x, str) for x in (varA, varB)):
    ...

我不懂python,但我怀疑你能做到。在大多数语言中,当你指的是
(a==something)
(b==something)
时,你无法比较
(a==something)
。你为什么要检查类型?Python的成语是寻求宽恕而不是许可。我不懂Python,但我怀疑你能做到这一点。在大多数语言中,当你指的是
(a==something)
(b==something)
时,你无法比较
(a==something)
。你为什么要检查类型?Python的习惯用法是寻求宽恕而不是许可。在那里使用元组真的有语义意义吗?我会使用一个列表。或者甚至
isinstance(varA,str)或isinstance(varB,str)
@WaleedKhan这是一样的,但是为了使使用元组更有意义,因为元素不会被修改。事实上,您甚至可以查看
isinstance
的文档:
isinstance(对象、类或类型或元组)->bool
。您可以编写
isinstance(a,(str,list))
,但不能编写
isinstance(a,[str,list])
;试试看。@WaleedKhan
导入这个
写着“尽管实用性胜过纯洁性”。在这种情况下,我们知道我们只会在这个对象上调用
\uuuuu contains\uuuuu
,所以我们最好使用最有效的类型。在那里使用元组真的有语义意义吗?我会使用一个列表。或者甚至
isinstance(varA,str)或isinstance(varB,str)
@WaleedKhan这是一样的,但是为了使使用元组更有意义,因为元素不会被修改。事实上,您甚至可以查看
isinstance
的文档:
isinstance(对象、类或类型或元组)->bool
。您可以编写
isinstance(a,(str,list))
,但不能编写
isinstance(a,[str,list])
;试试看。@WaleedKhan
导入这个
写着“尽管实用性胜过纯洁性”。在这种情况下,我们知道我们只会在这个对象上调用
\uuuuu contains\uuuu
,因此我们最好使用最有效的类型。