如何使If语句失败,并有多个条件
问题描述:
我有以下元组列表。我试图测试一个消极的情况,以失败的条件。如何使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]) == 100
是False
,休息3个条件是True
,但我已经使用and
,应该不是这个if
条件失败并且打印error
?它力图打印Error
。 我对这里出了什么问题无能为力。帮助将不胜感激!
答
你会需要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 ...
的需要,并且得到简洁的代码。
'True and False'的计算结果为'False',因此条件不会被触发,所以'print'错误''不会被执行。 – metatoaster
只有当所有值不匹配时,才会打印“错误”。如果您希望在一个或多个'!='子句为真时打印它,请使用'或'而不是'和' –
明白了,谢谢much @ metatoaster – npatel