2016-07-09 5 views
0

私は電卓を作成していますが、これまでのプログラムでは、加算、減算、乗算、除算などの操作をユーザに求めています。次に、プログラムは2つのリストを作成します.1つは完全な数値を含み、もう1つは演算子を含みます。コードの次の部分は、演算子を含むリストにif文の形式で乗算または除算が含まれているかどうかをチェックするが、if文が失敗していて、リストに "*"と "/"が含まれているそうではありませんが、ここでは動作しないコードがあります。どんな助け?なぜ私のif文は、2つの文字列がリストに含まれていないと言っているのですか?

if ("*") or ("/") in Oper_NAN: 
print("POSITIVE") 
else 
    print("NEGATIVE") 

問題文は、常に2つの演算子がリストOper_NAN(Oper_NANのすべての項目がところで文字列である)でない場合でも、正と負決して返した場合ということです。 if文に間違ったラベルを付けていますか?読んでくれてありがとう!

答えて

6

は考える:

if ("*") or ("/") in Oper_NAN: print("POSITIVE") else print("NEGATIVE") 

あなたorの各側が個別に評価されます。ですから、これらのいずれかに該当するかどうかを検討している:

("*") 
("/") in Oper_NAN 

まず、非長さゼロの文字列であること、常にブールコンテキストでTrueとして評価されます。だからifの文は常にTrueです.Trueまたは何ものでも必ずTrueです。これはおそらく2つの文字のためのやり過ぎですが、あなたはまた、any()とジェネレータ式を使用して、それを書くことができ

if ("*") in Oper_NAN or ("/") in Oper_NAN: 

この問題を解決する最も簡単な方法がある

if any(c in Oper_NAN for c in "*/"): 
+0

ああ!速やかなご返信ありがとうございます。だから、基本的に、私は同時に両方をチェックすることはできませんか?それが簡単なソリューションに感謝している場合は、後でそのことを覚えておきます –

2

このif文基本的に次のように分類されます。

if True or (condition): #code 

Pythonのすべてに真理値があり、空でない文字列はTrueと評価されます。

お客様のifの状態が遅れて評価されます。最初に左辺が評価され、左辺がFalseの場合にのみ右辺が評価されます。しかし、空でない文字列は常にTrueであるため、if条件内のコードは常に実行されます。

ブール論理/真理値のもの:2 PたstatmentsとQためP or Qは、以下の場合にTrueと評価されます。 PTrueであり、Qが真または偽であるかにかかわらず、PFalseであり、QTrueであり、他のすべての場合がFalseである。

真理値表として知られているものを使用して、ここで興味のある方は、より「マシー」側です。

あなたが使用することができ
| P | Q | P v Q | 
----------------- 
| T | T | T | 
----------------- 
| T | F | T | 
----------------- 
| F | T | T | 
----------------- 
| F | F | F | 
----------------- 

if "*" in Oper_NAN or "/" in Oper_NAN 
関連する問題