0

Python で基本的なブール論理を学んでいます。等価演算子については理解していますが、and と or が挿入されると混乱します。たとえば、次のコードを見てください。

people = 20
cats = 30
dogs = 15

if people < cats:
   print "too many cats! the world is doomed!"

if people == cats or dogs == cats:
   print "this is too hard"

最初の if ステートメントと、それが出力される理由を理解しています。2 番目の if ステートメントがどのように評価されるかわかりません。その行を印刷するように変更するにはどうすればよいですか?

ご協力いただきありがとうございます!

4

3 に答える 3

5

andでは、式全体が になるために、式内のすべての部分が に評価される必要があります。TrueTrue

or式の一部が式全体に評価されるすぐに、うるさくなくなります。TrueTrue

この文脈では、短絡という用語に出くわすかもしれません。これは単に、式の結果を判断できるようになるとすぐに式の評価を停止することを意味します。

したがって、 の場合、andに評価される部分が見つかったらすぐに、式の残りの部分を見るのをやめることができFalseますTrue

同様に、 では、 でorある部分を見つけるとすぐに、True式全体が であることがわかり、Trueそれ以上調べる理由はありません。

投稿したコード例の場合:

if people == cats or dogs == cats:
    print "this is too hard"

これらのいずれか、または両方が people == catsdogs == cats評価されたTrue場合、ステートメント内の式全体ifは になりTrueます。どちらもではないためTrue、ステートメント内の式はif失敗し、つまり isFalseとなり、print ステートメントは実行されません。

最後に、実行するステートメントを出力したい場合は、ブール式が に評価されることを確認する必要がありますTrue。1 つの方法は、to の値に変更すること dogsです30。これdogs == catsは、式全体を作成して印刷を実行するTrueのに十分であるためです。True

于 2012-05-30T03:16:19.637 に答える
1

ifステートメントは両方とも同じ方法で評価されます。

if something:
    do_stuff

somethingが True の場合、do_stuffブロックは run[1] です。somethingTrue でない場合、do_stuffブロックは実行されません。2 つの if ステートメントの違いは、一方が他方と「動作が異なる」ということではなく、異なるバージョンの で実行されることですsomething

andorは、真理値を取り、新しい真理値を計算する二項演算です。と同じように1 + 3、数値を取得して新しい数値を生成する二+項演算です。2 つの真理値を取得し、新しい値を生成します。そして、数とから異なる数を生成するまたはを持つことができるのと同じように、真理値とから異なる真理値を生成するまたはを持つことができます。134a and babx + yx * yxya and ba or bab

しかし、if声明はそれを気にしません。テスト対象の真理値をどのように取得したかを知る必要はありません。どちらの方法でもまったく同じように機能します。andorはまったく別のものであり、真理値を組み合わせて新しい値を取得する方法にすぎません。


andどのように、どのように機能するかについての直感は、真または偽の可能性があることについて話すときに英語でor使用するいくつかの方法に基づいています。andor

「雨が降っている場合、傘を差し上げます」という文の「雨が降っている」の部分は、true または false のいずれかになる条件であり、文の残りの部分は、それが true の場合に何が起こるかを述べています。英語では、「雨が降っていて、歩きたい 思ったら、傘を差し上げます」とも言えます。これは、「雨が降っている」と「歩きたい」という 2 つの別々の条件が、単語によって 1 つの条件に結合されています。この文は、「雨が降っている」と「歩きたい」の両方が当てはまる場合、傘を差し上げます。晴れていれば傘はいらないと思いますし、車を運転していれば家と車の間が濡れても構わないと思います。

「雨が降ってい たり 、歩きたいと思ったら、傘を持ってきます」とも言えます。この文は、条件のいずれかまたは両方が真の場合、傘を差し上げますという意味です。ここで推測できるのは、雨が降っている場合は、歩く気がなくても後で傘を持ちたいということであり、歩きたいと思ったら、散歩中に雨が降った場合に備えて傘を持ちたいということです。今は雨が降っていなくても。

andプログラミングとandor演算子の真理値を理解する最善の方法は、この自然な英語の理解andor心に留めておくことです。andこれにより、とを含む単純な式を直感的に理解することができますor。しかし、プログラミングでは方法andと動作が形式化されているため、通常の英語の使用におけるあいまいさや特殊なケースに関係なく、それらがどのように動作するかを正確にor書き留めることができます。

A and Bが True で True の場合Aは True B、それ以外の場合は False (Aまたは またはが False の場合Bは False)。is は、 orがA or BTrue の場合にTrue です( is False で False の場合は False 、それ以外の場合は True)。これを示す表を次に示します。ABAB

  A   |   B   |  A and B
------+-------+---------
True  | True  |   True
True  | False |   False
False | True  |   False
False | False |   False

  A   |   B   |  A or B
------+-------+--------
True  | True  |   True
True  | False |   True
False | True  |   True
False | False |   False

[1] 実際、話はこれよりも少し複雑です (私の回答全体に当てはまります)。Python のほとんどのブール演算 (ifステートメントと演算子andandを含むor) は、正確な Truth 値ではなく、「真実の」値で動作します。簡単に言えば、0、空のコンテナーと文字列、および特別な値である数値は、真の値を期待する操作にそれらを指定したNone場合と同様Falseに動作し、その他はすべて であるかのように動作しますTrue。「真実」または「偽り」という用語を使用して、必ずしもそうではないか、TrueまたはFalseあたかもそうであるかのように機能している値を説明することがあります。

同様に、 や のような、既存のものから新しい真値を生成する操作は、必ずしもまたはを返すandとは限りません。上記の表で要求されるように、「真」または「偽」である値を返す場合があります。orTrueFalse

しかし、これを読んでいる人が真理値を使ったプログラミングを学ぶ初期段階にある場合は、これを無視して、自分は と を操作Trueしていると考えてくださいFalse。同様に、「短絡評価」と についても心配しないでください。物事がチェックされる順序(本物TrueでありFalse、関与している場合でも、ほとんどの場合、他の値を使用している場合でも問題ありません)。基本を理解すれば、これらの概念に理解を広げるのは非常に簡単です。

于 2012-05-30T04:10:28.173 に答える
1

OR は両方または一方のステートメントが真かどうかをテストし、AND は両方のステートメントが真かどうかをテストします。

于 2012-05-30T03:17:31.347 に答える