4

私はここにいくつかのコードを持っています:

m = None
n = None

if not m:
    print "Something happens"
>>> Something happens

私が行った場合:

if not m and n:
    print "Something happens"

何も起こりません。

しかし、私はできる:

m, n = 1,2
if m and n:
    print "Something happens"
>>> Something happens

同じように処理されない場合とそうでない場合はなぜですか?'そうでない場合'、'および'ステートメントを取りませんか?

ありがとうございました

4

3 に答える 3

13

演算子の優先順位に問題があります。

if not m and nと同等if (not m) and nです。あなたが欲しいのはまたはif not m and not nですif not (m or n)

参照:ド・モルガンの法則

于 2012-04-20T08:59:35.993 に答える
2

notクローゼット オペランドに適用されます。if not m and nwhereがwhich isにnot適用され、 because of , is evaluate toと書いたので、ステートメント全体が に評価されます。mTrueandnFalseFalse

于 2012-04-20T09:06:28.450 に答える
2

あなたはこの記事を探していると思います: Truth Value Testing

任意のオブジェクトは、真偽値、if または while 条件での使用、または以下のブール演算のオペランドとしてテストできます。次の値は false と見なされます。

  • なし
  • 間違い
  • 0、、、など0Lの任意の数値型の0.0ゼロ0j
  • ''、などの空のシーケンス。()[]
  • などの空のマッピング{}
  • __nonzero__()クラスがまたは__len__()メソッドを定義している場合、そのメソッドが整数ゼロまたはブール値 False を返す場合、ユーザー定義クラスのインスタンス。

他のすべての値は true と見なされます。したがって、多くの型のオブジェクトは常に true です。ブール値の結果を持つ演算と組み込み関数は、特に明記されていない限り、false と true の場合は常に or を返し0ます。(重要な例外: ブール演算 or および and は常にオペランドの 1 つを返します。)False1True

特に次の章では、ケースについて説明します (ブール演算 — andornot ):

not は非ブール演算子より優先度が低い

于 2012-04-20T09:11:45.667 に答える