2017-10-11 18 views
0

次のタプルのリストがあります。私は条件を失敗するために否定的なシナリオをテストしようとしています。作成する方法文が複数の条件で失敗する場合

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

私は条件を記述しようとしています:int(regop[0][3]) == 100Falseで、

この場合、
>>> 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" 

、および3つの条件を休まはTrueですが、私はandを使用しているとして、このif条件いけません失敗して印刷するerror?それはプリントErrorを印刷します。 ここで間違っていることは私には分かりません。ヘルプは高く評価されます!

+3

'TrueとFalse'は' False'と評価されるため、条件は起動されず、 'print"というエラーは実行されません。 – metatoaster

+1

すべての値が一致しない場合のみ "エラー"が表示されます。 1つ以上の '!= '節が真であるときに印刷したい場合は、'と 'の代わりに'または 'を使用してください。 –

+0

ポイントを得ました、大変ありがたい@メタトマスター – npatel

答えて

2

あなたはif任意のTrueに評価する条件の上でトリガしたい場合は、or代わりのandを必要とするだろう。

現在のソリューションの改善点として、anyの使用をお勧めします。

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

any 1つでも条件が発電理解の内側Trueと評価された場合にTrueを返します。逆にとなるようにする場合は、の代わりにallと置き換えます。

any/allを使用すると、を何度もハードコードする必要がなくなり、簡潔なコードになります。

関連する問題