1

Python2.7の場合

通訳に次のことを尋ねるとき:

(1 or 3) > 2戻りますFalse

どうしてこれなの?どうやら1か3のどちらかが2より大きいかどうかではなく、私は効果的に通訳に何を尋ねていますか。

同様に、質問(1 or 5) in range(2,6)も返されますFalse

私はそれがステートメントの私の(xまたはy)部分に関係していると100%確信していますが、繰り返しますが、これはなぜですか?私は私がただ尋ねることができることを理解しているので、私はこのようなことを述べる別の方法をそれほど必要としません:

if x in range(2,6) or y in range(2,6):

しかし、なぜそれが機能しないのか疑問に思っていました!

4

5 に答える 5

4

調べてみましょう(1 or 3) > 2

  • (1 or 3)最初に評価され、与えられ1ます(の独特の性質andor理由がわからない場合を参照してください)。
  • 1 > 2次に評価され、を与えFalseます。

表現しようとしていることを表現する正しい方法は次のとおりです。

>>> 1 > 2 or 3 > 2
True

もう1つの、より一般的な方法は次のとおりです。

>>> t = (1, 3)
>>> any(el > 2 for el in t)
True

ここでtは、任意の反復が可能です。

于 2013-03-06T08:14:02.087 に答える
0

1(数値として理解される)はtrue評価されます(0を除くすべての数値は評価されtrueます)ので、3(数値として理解される)を評価する必要はありません。
これは、OR条件を使用するため、最初に見つかった値に対する評価を「停止」trueします。
それで、1 > 2ですか?答えはfalse

分解するか、2つの別々の条件に分解する必要があります。

1 > 2 or 3 > 2
于 2013-03-06T08:13:33.367 に答える
0

1 は true に対応します。したがって、

1 or 3

1

1 > 2

は偽です。

そして、あなたが答えを試していれば、これを知ることができたでしょう 1 or 3

シェルで。

于 2013-03-06T08:15:23.810 に答える
0

これは、ブール演算の適切な使用例ではありません。最初は次のようになります。

(1 > 2) or (3 > 2)

表現:

(1 or 3)  > 2

最初にうまくいき1 or 3、それが2より大きいかどうかを調べようとします。

同様に:

(1 or 5) in range(2,6)

おそらく、次のいずれかのほうが適切に表現されます。

(1 in range(2,6)) or (5 in range(2,6))

また:

((1 >= 2) and (1 < 6)) or ((5 >= 2) and (5 < 6))
于 2013-03-06T08:16:46.780 に答える
0

この質問にも 2 セントを投じます。

Python がステートメントを評価するとき

(1 or 3) > 2

これはそれがすることです、ちょっと!最初の番号を取得して電話をかけましょうbool()。ここにない数値は0評価されTrue、それを返します。

試すことができます(10000 or 3)。そうでない限り、常に最も左側の「変数」を返します0

反対の例は、あなたが持っていた場合です

(0 or 3)

次に、式の残りの部分を評価します。これは、基本的に疑似コードで次のように記述します。

returned number (wheter its the left or right) is greater than 2

そして、これが奇妙になるところです。括弧がどのように評価されたかにより、式は常に異なります。あなたの場合、それは

1 > 2 == Falseしかし(0 or 3) > 2 == True

部分に関してrangeは、同じ論理が適用されます。括弧内の左側の数値は「返される」ため、範囲チェックでは使用できません。

(1 or 4) in range(2,5) == False

于 2013-03-06T08:28:18.077 に答える