1列

2017-09-21 3 views
-2

に複数varaiblesを比較する文はそう関係なく、私はこれらを試してください何それだけでタプルと評価され、誰かがこの1列

+0

' - これは比較演算子チェーン(のpythonで機能)を使用しています –

答えて

3

x, y, z == "no no yes"で私を助けることができる、すべての文字列を出力しないstaments

if (x,y,z == "no no yes"): 
    print ("REBEL ROBOT DETECTED, DESTROY IMMEDIATELY") 
if (x,y,z == "no yes no"): 
    print ("PERFECT SOLDOER DETECTED, REPORT TO US ARMY") 
if (x,y,z == "yes no no"): 
    print ("LONER ROBOT DETECTED, DESTROY IMMEDIATELY") 
if (x,y,z == "no yes yes"): 
    print ("THIS ROBOT HURTS HUMANS") 
if (x,y,z == "yes yes no"): 
    print ("This robot is self destructive") 
if (x,y,z == "yes no yes"): 
    print ("This robot disobeys orders") 
if (x,y,z == "no no no"): 
    print ("YOU HAVE A PHYCOPATH ROBOT, DESTROY AT ALL COSTS") 

場合場合3つの値の:xy、及びzかどうかを示すブール値(真/偽)値"no no yes"に等しいです。これはゼロ以外の長さのタプルなので、それは真実なので、すべてifの条件が成立します。

代わりに、その上(x, y, z) == ("no", "no", "yes")を書いて。

0
(x,y,z == "no no yes") 

これは期待どおりではありません。まず、複数の変数を同時に1つの文字列と比較することはできません。これを別々の小切手に分割する必要があります。

しかし、なぜあなたのコードの印刷には、すべての文字列をしますか?これは、Pythonを初めて使う人にとっては少し驚くかもしれません:Pythonのコンマはタプル要素を分けるので、x, y, zは、3つの要素、すなわち、xy、およびzのタプルになります。タプルは文字列と決して等しくないので、なぜあなたのチェックはすべて成功していますか?

理由は==オペレータがコンマよりも強く結合することです。あなたが実際に書いていることは、次のようなものです:(x, y, (z == "no no yes"))。したがって、文字列に対してz(と唯一の文字はz)を比較し、その結果をタプルの3番目の値として入れます。 xおよびyはそのままタプルの第1および第2の要素とする。

と非空のタプルはPythonでTrueに評価することで起こります。そこで、以下では、常に動作します:あなたがチェックしているので

if x == "no no yes" or y == "no no yes" or z == "no no yes": 
    print ("REBEL ROBOT DETECTED, DESTROY IMMEDIATELY") 

を:

if (x, y, False): 
    print('Works') 

あなたのコードを修正するために、前述したように、あなたは個別に各値に対する各変数をチェックする必要があります

if "no no yes" in (x, y, z): 
    print ("REBEL ROBOT DETECTED, DESTROY IMMEDIATELY") 

ヨ:平等、あなたはまた、逆に、ロジックとここin演算子を使用することができますuは、次の質問から(ただ、他の方向に)これについての詳細を学ぶことができます:How do I test one variable against multiple values?


そして私はちょうどkindall’s answerから実現として、あなたはおそらく、あなたがそれぞれに対してチェック別個の文字列にこれらの文字列を分割したいです別途変数:

のx == yの== zは==「リテラル」 `あなたが探しているものかもしれ場合
if x == "no" and y == "no" and z == "yes": 
    print ("REBEL ROBOT DETECTED, DESTROY IMMEDIATELY")