2017-10-11 79 views
0

我有以下元组列表。我试图测试一个消极的情况,以失败的条件。如何使If语句失败,并有多个条件

>>> regop = [('1000', '63', 'Untaggged', '1000')] 

我想写一个条件:

>>> if int(regop[0][0]) != 1000 and int(regop[0][1]) != 63 and regop[0][2] != 'Untaggged' and int(regop[0][3]) == 100: 
... print "error" 

在这种情况下,int(regop[0][3]) == 100False,休息3个条件是True,但我已经使用and,应该不是这个if条件失败并且打印error?它力图打印Error。 我对这里出了什么问题无能为力。帮助将不胜感激!

+3

'True and False'的计算结果为'False',因此条件不会被触发,所以'print'错误''不会被执行。 – metatoaster

+1

只有当所有值不匹配时,才会打印“错误”。如果您希望在一个或多个'!='子句为真时打印它,请使用'或'而不是'和' –

+0

明白了,谢谢much @ metatoaster – npatel

回答

2

你会需要or代替and,如果你想在if的评估,以True条件的任何触发。

作为对当前解决方案的改进,我建议使用any

vals = (1000, 63, 'Untaggged', 100) 
if any(x != y for x, y in zip(regop[0], vals)): 
    print('error') 

any回报True如果连一个单一的条件计算为True发电机解析里。相反地​​,如果想要结果为True,则仅在条件中的理解为True时,将any替换为all

使用any/all消除了多次硬编码x1 != y1 or x2 != y2 or ...的需要,并且得到简洁的代码。