21

a<b<cstandard を使用せずにこれを条件として使用できるかどうかを知りたいと思いましたa<b and b<c。それで私はそれを試してみました、そして私のテスト結果は合格しました。

a = 1
b = 2
c = 3

assert(a<b<c) # In bounds test
assert(not(b<a<c)) # Out of bounds test
assert(not(a<c<b)) # Out of bounds test

今回は負の領域で、より多くの数値を試してみました。どこでa, b, c = -10, -9, -8。テストはもう一度合格しました。より高い範囲でのテスト スーツでさえ機能しa, b, c = 10, 11, 12ます。またはさえa, b, c = 10, 20, 5

そして、C++ で行われた同じ実験。これは私の考え方でした:

#include <iostream>

using namespace std;

int main()
{
    int a,b,c;
    a=10;
    b=20;
    c=5;
    cout << ((a<b<c)?"True":"False") << endl; // Provides True (wrong)
    cout << ((a<b && b<c)?"True":"False") << endl; // Provides False (proper answer)
    return 0;
}

私が遭遇した他のすべての言語では、ブール値がc. これらの言語でa<bは、ブール値に評価され、評価を続けるb<cと、数値に対してブール値を評価しようとするため、無効になります (ほとんどの場合、コンパイル時エラーがスローされるか、意図した比較が改ざんされます)。これはなぜかちょっと不安です。これが構文の一部であることを確認する必要があると思います。また、Python ドキュメントでこの機能が提供されている場所への参照を提供すると、このような機能がどの程度提供されているかを確認できるようになります。


$a='4,5,4';
$ab= explode(',', $a);
foreach ($ab as $b)
{
   $sum+=$b;    //perform your calculation
}
echo $sum;
4

2 に答える 2

29

これはここに文書化されています。

正式には、a、b、c、...、y、z が式であり、op1、op2、...、opN が比較演算子である場合、a op1 b op2 c ... y opN z は a op1 b と同等です。および b op2 c および ... y opN z ただし、各式は最大 1 回評価されます。

そして、例として、

比較は任意に連鎖できます。たとえば、x < y <= z は x < y および y <= z と同等ですが、y は 1 回だけ評価されます (ただし、どちらの場合も、x < y が見つかった場合、z はまったく評価されません)。偽であること)。

于 2013-09-12T03:56:30.690 に答える
1

Python は関係演算子を「自然に」連鎖させます。Python の関係演算子にはinand is(およびその否定形) が含まれていることに注意してください。これらをシンボリック関係演算子と混合すると、驚くべき結果が生じる可能性があります。

于 2013-09-12T03:56:30.623 に答える