Pythonで「whileTrue」とはどういう意味ですか?


90
def play_game(word_list):
    hand = deal_hand(HAND_SIZE) # random init
    while True:
        cmd = raw_input('Enter n to deal a new hand, r to replay the last hand, or e to end game: ')
        if cmd == 'n':
            hand = deal_hand(HAND_SIZE)
            play_hand(hand.copy(), word_list)
            print
        elif cmd == 'r':
            play_hand(hand.copy(), word_list)
            print
        elif cmd == 'e':
            break
        else:
            print "Invalid command."

何が本当ですか?

「本当ながら」は速記だと思いますが、何のために?変数「hand」に値が割り当てられている間?そして、変数 'hand'に値が割り当てられていない場合はどうなりますか?


1
Trueの場合、私はここで見つけることができ尋ねソートソート関連する質問1. Aのエイリアスのですstackoverflow.com/questions/885908/...
COPAS

17
@CopasTrueは、のエイリアスではありません1。多くの言語で1は、ブール値のコンテキストで真実を評価しますが。
adamse 2010

2
adamse:Pythonの一部のバージョンでTrueは、のエイリアスになって1いますね。はいですが、Pythonの最新バージョンには、実際のブール型があります。
ケン

1
@ adamse、@ Ken:Python2.3の新機能からの引用-PEP285:" Python 2.3にブール型が追加されました。__builtin__モジュールにTrueとFalseの2つの新しい定数が追加されました(TrueとFalseの定数がビルドに追加されました)。 -Python 2.2.1にありますが、2.2.1バージョンは単に1と0の整数値に設定されており、別の型ではありません。) "。
Cristian Ciupitu 2010

@adamse Pythonではそうではありませんが、多くの言語ではそうです。もっと一般的な質問だと思いました。ババが「本当は1の別名のようなものだ」と言ったように初心者に話すのは完全に正確です。私はPythonでTrueが1のエイリアスではないことに同意します。そうであるとは言いませんでした。
copas 2010

回答:


108

while True永久ループを意味します。このwhileステートメントは式を受け取り、式が(ブール値の)「true」と評価されている間にループ本体を実行します。True常にブール値の「true」と評価されるため、ループ本体が無期限に実行されます。これは、最終的には慣れることになるイディオムです。遭遇する可能性のあるほとんどの言語には、同等のイディオムがあります。

ほとんどの言語には通常、ループから早期に抜け出すための何らかのメカニズムがあることに注意してください。Pythonの場合、それはあなたの質問のサンプルbreakcmd == 'e'場合のステートメントです。


9
わかりやすくするために、ほとんどの言語でwhile(true == true)を実行できると思います。これは、新しいプログラマーがその背後にあるロジックをよりよく理解するのに役立つ場合があります。
クリス

9
クリス、while True==True醜いです。それはwhile 'apples'!='oranges':)と同じくらい醜いです
dheerosaur 2010

34
私の先生の一人が指摘したように、あなたtrue==trueが改善だと思うなら、どこでやめますか?(true==true)==trueさらに良くなるのではないでしょうか?
ケン

10
@Chris、最終的には、論理式の代わりにブール値または変数を使用できることに注意する必要があります。「最終的に」はできるだけ早く使用する必要があります。
マークランサム

6
@Markは最終的に、新しいプログラマーにブール論理などを理解させるために、少し追加の助けが必要になる場合があることに注意する必要があります。私がやろうとしていたのは、彼がそれを理解するのを助けることだけでした。
クリス

53

私の質問:何が本当ですか?

しばらくはTrueありますTrue

whileループは、条件式がに評価される限り実行されTrueます。

以来True、常にに評価されTrue、ループは、ループ内で何かするまで、無期限に実行されますreturn秒またはbreak秒。


4
これはPythonです。括弧で囲まれた式はありません; P
Mike Axiak 2010

ええ、良い点です。私はPythonで考えることに慣れていません。必要に応じて、その周りに
パレンを

10

私の質問:何が本当ですか?

whileステートメントの()内のすべては、ブール値として評価されます。つまり、trueまたはfalseに変換されます。

ステートメントで検討する while(6 > 5)

それは最初に表現6 > 5を評価するtrueので、それは言うことと同じですwhile(true)

FALSE、0、空の文字列 ""、null、または未定義でないものはすべて、trueと評価される可能性があります。

私が最初にプログラミングを始めたときif(foo == true)、私は以前のようなことをしていましたが、それが実質的にと同じことであることに気づいていませんでしたif(foo)

だからあなたが言うときwhile(true)そのようなものは言っているwhile(true == true)

だからあなたの質問に答えるために:TRUEはTrueですが。


10

whileTrueはtrueです-つまり常に。これは無限ループです

ここで重要な違いに注意してください。Trueこれは、特定のタイプの定数値を示す言語のキーワードであり、「true」は数学的な概念です。


技術的に言えば、あなたは間違っています。構成は、「trueはfalseではない」という意味です。while(5)適切なブール値がないCで書くと、違いがわかります。それは意味しませんwhile(5==1)、それは意味しwhile(5!=0)ます。
Blindy 2010

2
「不定ループ」と言う方が適切だと思います。ループは、ある時点でブレークまたはリターンによって中断されることを前提としている必要があります。本当に「無限」ループはプログラマーのエラーです。「不定ループ」は設計により作成されます。
Dagg Nabbit 2010

3
@Blindy:自動キャストを使用した弱い型の言語では、x 'は' yに評価されると言うことができます... 5が厳密に0に等しくない間ではなく、5がTrueに大まかに等しい間です。
Dagg Nabbit 2010

@Blindyはwhile(5)、Cで、while5がtrueであることを意味し、trueorの0間ではなく、まったく異なるものです。 5常に真実です。一般に、言語にキーワードがある場合true、その定数は真ですが、真の定数だけではありません。同様falseに、必ずしも偽の値だけではありません。
クリス・ドッド


3

Trueは常になTrueので、while True永久にループします。

whileキーワードは、式を取り、そして式がtrueの間ループします。True常に真である式です。

おそらく明確な例として、次のことを考慮してください。

a = 1
result = a == 1

ここでa == 1は、が返されるTrueため、に入れTrueられresultます。したがって、

a = 1
while a == 1:
  ...

と同等です:

while True:
  ...

ループa内の値を変更しない場合while


1
True常に Trueではありませ、例えばTrue = False。;-)
jathanism 2010

1
@ jathanism-真実は真実です、計算の終わりまで。
dheerosaur 2010

3

正式にTrueは、bool型のPython組み込み定数です。

ブール型に対してブール演算を使用して(たとえば、インタラクティブなPythonプロンプトで)、数値をブール型に変換できます。

>>> print not True
False
>>> print not False
True
>>> print True or False
True
>>> print True and False
False
>>> a=bool(9)
>>> print a
True
>>> b=bool(0)
>>> print b
False
>>> b=bool(0.000000000000000000000000000000000001)
>>> print b
True

そして、あなたが見ているものとPythonコンパイラが見ているものには潜在的に「落とし穴」があります。

>>> n=0
>>> print bool(n)
False
>>> n='0'
>>> print bool(n)
True
>>> n=0.0
>>> print bool(n)
False
>>> n="0.0"
>>> print bool(n)
True

Pythonがbool型を内部的に格納する方法のヒントとして、bool型を整数にキャストすると、Trueは1、Falseは0になります。

>>> print True+0
1
>>> print True+1
2
>>> print False+0
0
>>> print False+1
1

実際、PythonboolタイプはPythonのintタイプのサブクラスです。

>>> type(True)
<type 'bool'>
>>> isinstance(True, int)
True

あなたの質問のより重要な部分は「何while Trueですか?」です。「真とは何か」であり、重要な結果:偽とは何ですか?

まず、学習しているすべての言語について、その言語が「真実」および「偽」と見なすものを学びます。Pythonは考えて真実を少し異なるよりもPerlの真実例えば。他の言語では、true / falseの概念少し異なります。後で多くの頭痛の種を避けるために、さまざまな操作とフロー制御について、言語がTrueとFalseと見なすものを理解してください。

探しているものが見つかるまで何かを処理したいアルゴリズムはたくさんあります。したがって、無限ループまたは不定ループ。各言語は、これらの構成要素に対して独自のイディオムを持っている傾向があります。以下は、Perlでも機能する一般的なC無限ループです。

for(;;) { /* loop until break */ }

/* or */

while (1) {
   return if (function(arg) > 3);
}

このwhile True:形式は、Pythonで不定ループの場合に一般的であり、ループから抜け出す方法があります。Pythonフロー制御を学び、while Trueループから抜け出す方法を理解します。たとえば、ほとんどの言語とは異なり、Pythonはelseループに句を含めることができます。最後のリンクに例があります。


1

whileループは条件付き引数は(一般的にどちらか真か偽であるか、などと解釈することができるものを意味する)かかり、かつ唯一の条件利回りながら実行されますTrue

while True?さて、最も単純な真の条件はTrueそれ自体です!したがって、これは無限ループであり、通常、多くのループを必要とするゲームに適しています。(ただし、私の観点からは、ある種の「完了」変数をfalseに設定し、それをtrueにしてゲームを終了すると、ループはより似たwhile not done:ものになります。)


1

一部の言語では、Trueは数字の別名です。ブール論理について詳しく読むことで、これがなぜであるかを詳しく知ることができます。



0

whileループは、条件がfalseになるまでループし続けます。たとえば(擬似コード):

i = 0
while i < 10
  i++

ループが繰り返されるたびに、i10になるまで1ずつ増加します。その時点で、条件i < 10は真ではなくなり、ループが完了します。

の条件while Trueは明示的かつ常にtrueであるため、ループは終了しません(通常break、ループ本体内のような構造によって、他の方法で分割されるまで)。


0

Trueより速く評価されるものはありませんTrue。なので、等のwhile True代わりに使うといいですねwhile 1==1


0
while True:
    ...

無限ループを意味します。

whileステートメントは、有限ループでよく使用されます。ただし、定数「True」を使用すると、ループを中断する必要がない限り、ループを制御する必要なしにwhileステートメントの繰り返しが保証されます(たとえば、反復内でブール値を設定します)。

実際には

True == (1 == 1)

0

Trueは無限ループを意味しますが、これは通常、長いプロセスで使用されます。あなたになら変えられる

while True:

while 1:

0

これらの答えのほとんどはさまざまな程度で正しいですが、私が望むほど簡潔なものはありません。

簡単に言うと、usingwhile True:は、breakまたはを使用して明示的にループから抜け出すまで実行を継続するループを実行する方法にすぎませんreturn。Trueは常にTrueと評価されるため、必要なときにループを強制的に終了する必要があります。

while True:
    # do stuff

    if some_condition:
        break

    # do more stuff - code here WILL NOT execute when `if some_condition:` evaluates to True

通常、ループはwhile条件が偽になるまで、または事前定義されたエンドポイントに到達するまで実行するように設定されます。

do_next = True

while do_next:

    # do stuff

    if some_condition:
        do_next = False

    # do more stuff - code here WILL execute even when `if some_condition:` evaluates to True

これらの2つのコードチャンクは事実上同じことをします

ループが評価する条件が、ユーザー入力値など、直接制御できない値である可能性がある場合は、通常、データを検証して明示的にループから抜け出す必要があるため、どちらの方法でも実行する必要があります。 。

このwhile True形式はbreak、その正確な時点でループを壊していることがわかっているため、よりPython的ですがdo_next = False、の次の評価の前に、より多くのことを実行できますdo_next


-4

反対のことが提示されるまで、何でも真と見なすことができます。これが二重性の仕組みです。それは反対を比較する方法です。黒は白まで真であり、白になると偽になります。黒は白になるまで偽になることもあり、その時点で真になります。それは状態ではなく、反対の状態の比較です。どちらかが真の場合、もう一方は間違っています。Trueは、それが正しい、または受け入れられることを意味するものではありません。逆が常に偽である状態です。それは二元性です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.