Python'da "while True" ne anlama geliyor?


91
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."

NE Doğru iken?

'Doğru iken' demenin kısa olduğunu düşünüyorum, ama ne için? Değişken 'el' bir değer atanırken? Peki ya 'el' değişkenine bir değer atanmamışsa?


1
Doğru, 1 için bir tür takma addır. Sorduğum bir tür ilgili soru burada bulunabilir stackoverflow.com/questions/885908/…
Copas

17
@Copas, Trueiçin bir takma ad değildir 1. Pek çok dilde 1mantıksal bağlamda gerçeği değerlendirmesine rağmen .
adamse

2
adamse: Python'un bazı sürümlerinde, Truebir takma ad olmuştur 1, değil mi? Evet olsa da, Python'un son sürümlerinde gerçek bir boole türü vardır.
Ken

1
@adamse, @Ken: Python 2.3'teki yeniliklerden alıntı - PEP 285 : " Python 2.3'e bir Boolean türü eklendi. __builtin__Modüle True ve False olmak üzere iki yeni sabit eklendi . (Oluşturulan Python 2.2.1'de -ins, ancak 2.2.1 sürümleri basitçe 1 ve 0 tam sayı değerlerine ayarlanmıştır ve farklı bir tür değildir.) ".
Cristian Ciupitu

@adamse Python'da değil, ancak birçok dilde öyle. Daha genel bir soru olarak düşündüm. Yeni başlayan birine, Baba'nın söylediği gibi konuşmak "Doğru, 1'in takma adıdır" tamamen doğrudur. Python'da True 1'in takma adı olmadığına katılıyorum. Öyle olduğunu söylemedim.
Copas

Yanıtlar:


108

while Truesonsuza kadar döngü anlamına gelir. whileİfadesi, ifade alır ve halka gövdesi yürütür ise (boolean) "true" sentezleme değerlendirir. Trueher zaman mantıksal "true" olarak değerlendirilir ve böylece döngü gövdesini süresiz olarak yürütür. Sonunda alışacağın bir deyim! Karşılaşacağınız çoğu dilin eşdeğer deyimleri vardır.

Çoğu dilin döngüden erken çıkmak için genellikle bazı mekanizmalara sahip olduğunu unutmayın. Python durumunda, sorunuzdaki örnek durumundaki breakifadedir cmd == 'e'.


9
Açıklık adına, çoğu dilde while (true == true) yapabileceğinize inanıyorum. Bu, yeni bir programcının arkasındaki mantığı daha iyi anlamasına yardımcı olabilir.
Chris

9
Chris, while True==Trueçirkin. Bu kadar çirkin while 'apples'!='oranges':)
dheerosaur

34
Öğretmenlerimden birinin belirttiği gibi: true==truebir gelişme olduğunu düşünüyorsanız , nerede durursunuz? Daha (true==true)==trueiyi olmaz mıydı ?
Ken

10
@Chris, sonunda mantık ifadesi yerine bir boole değerinin veya değişkeninin kullanılabileceğinin farkında olmalı ve "sonunda" mümkün olan en kısa sürede olmalıdır.
Mark Ransom

6
@Mark sonunda, boole mantığını ve benzerlerini anlamak için yeni bir programcı bulmanın biraz ek yardım gerektirdiğinin farkında olmalıdır. Tek yapmaya çalıştığım, anlamasına yardım etmekti.
Chris

53

sorum: NE DOĞRU iken?

İken Trueise True.

While döngüsü, koşullu ifade olarak değerlendirildiği sürece çalışacaktır True.

Yana Truehep sonucunu True, döngü döngünün içinde bir şey kadar, süresiz olarak devam edecektir returnler veya breaks.


4
Bu pitondur. Parantez içinde ifade yoktur; P
Mike Axiak

heh, iyi nokta. Python'da düşünmeye alışkın değilim. Ben varsayalım rağmen verebilir isterseniz etrafında parens koymak ...
Dagg Nabbit

10

sorum: NE DOĞRU iken?

While ifadesinin () içindeki her şey bir mantıksal olarak değerlendirilecektir. Yani doğru ya da yanlışa dönüştürülür.

İfadede düşünün while(6 > 5)

İlk önce , demekle aynı 6 > 5olan ifadeyi değerlendirirtruewhile(true)

FALSE, 0, emptry string "", null veya undefined olmayan her şey muhtemelen doğru olarak değerlendirilecektir.

Programlamaya ilk başladığımda eskiden şöyle şeyler if(foo == true)yapardım, bunun neredeyse aynı şey olduğunu fark etmemiştim if(foo).

Öyleyse while(true)onun gibi dediğindewhile(true == true)

Öyleyse sorunuzu cevaplamak için: DOĞRU Doğru iken.


10

while Truedoğrudur - yani her zaman. Bu sonsuz bir döngüdür

TrueBelirli bir tipin sabit bir değerini ifade eden dilde anahtar kelime olan ve matematiksel bir kavram olan 'true' arasındaki önemli ayrıma dikkat edin .


Teknik olarak konuşursak, yanılıyorsun. Yapı, "doğru yanlış değildir" anlamına gelir. while(5)Uygun boolelerin olmadığı C dilinde yazarsanız, farkı görebilirsiniz . Bu demek değil while(5==1), demek while(5!=0).
Blindy

2
Bence 'belirsiz döngü' demek daha doğru olur; varsayım, döngünün bir noktada bir kesinti veya geri dönüş ile kesintiye uğrayacağı olmalıdır. Gerçekten 'sonsuz' döngüler programcı hatasıdır; 'belirsiz döngüler' tasarım tarafından yaratılır.
Dagg Nabbit

3
@Blindy: Otomatik atama ile zayıf yazılmış bir dilde, x 'y olarak değerlendirir diyebilirsiniz ...
Dagg Nabbit

@Blindy, while(5)C'de while 5doğru anlamına gelir , onun trueveya 0tamamen farklı bir şey değil. 5her zaman doğrudur. Genel olarak, diller bir anahtar kelimeye sahip olduğunda true, bu doğru olan bir sabittir, ancak doğru olan tek sabit değildir. Benzer şekilde false, yanlış olan tek değer mutlaka değildir.
Chris Dodd

4

Bu bağlamda, sanırım şu şekilde yorumlanabilir:

do
...
while cmd  != 'e' 

3

Trueher zaman True, bu nedenle while Truebir şekilde döngü sonsuza dek.

whileAnahtar kelime bir ifade alır ve ifade doğru olduğu sürece döngü oluşturur. Trueher zaman doğru olan bir ifadedir.

Muhtemelen açıklayıcı bir örnek olarak aşağıdakileri düşünün:

a = 1
result = a == 1

Burada a == 1geri dönecek Trueve dolayısıyla Trueiçine girecek result. Bu nedenle

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

eşdeğerdir:

while True:
  ...

Döngünün aiçindeki değeri değiştirmemeniz koşuluyla while.


1
Trueher zaman değil True, örneğin True = False. ;-)
jathanism

1
@ jathanism- Gerçek gerçektir, hesaplaşmanın sonuna kadar.
dheerosaur

3

Resmen Truebir Python olduğu dahili sabit bir bool türü.

Sen kullanabilirsiniz Boolean operasyonları ve (etkileşimli örneğin istemi piton de) bool türleri üzerinde dönüştürme numaraları bool tipe:

>>> 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

Ve Python derleyicisinin gördükleriyle potansiyel olarak "gotcha" vardır:

>>> 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'un bool türlerini dahili olarak nasıl depoladığına dair bir ipucu olarak, bool türlerini tam sayılara çevirebilirsiniz ve True 1 ve False 0 olarak çıkacaktır:

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

Aslında, Python booltürü , Python türünün bir alt sınıfıdır int:

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

Sorunuzun daha önemli kısmı "Nedir while True?" 'Doğru nedir' ve önemli bir sonuçtur: Yanlış nedir?

Öncelikle, öğrendiğiniz her dil için, dilin neyi 'doğru' ve 'yanlış' olarak gördüğünü öğrenin. Örneğin Python, Gerçeği'yi Perl Truth'tan biraz farklı olarak değerlendirir . Diğer dillerde biraz farklı doğru / yanlış kavramları vardır . Dilinizin farklı işlemler için Doğru ve Yanlış kabul ettiğini bilin ve daha sonra birçok baş ağrısını önlemek için akış kontrolü yapın!

Aradığınızı bulana kadar bir şeyi işlemek istediğiniz birçok algoritma vardır. Bu nedenle sonsuz döngü veya belirsiz döngü. Her dil, bu yapılar için kendi deyimine sahip olma eğilimindedir. Perl için de çalışan yaygın C sonsuz döngüleri şunlardır:

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

/* or */

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

while True:Formu döngünün kırma bazı şekilde belirsiz döngüler Python'la yaygındır. Döngülerden nasıl çıktığınızı anlamak için Python akış kontrolünü öğrenin while True. Çoğu dilden farklı olarak, örneğin, Python elsebir döngüde cümle içerebilir . Son linkte bir örnek var.


1

Bir whiledöngü, koşullu bir argüman alır (genellikle doğru veya yanlış olan veya bu şekilde yorumlanabilen bir şey anlamına gelir) ve yalnızca koşul ortaya çıktığında çalıştırılır True.

Gelince while True? Eh, en basit gerçek koşul Truekendisidir! Yani bu sonsuz bir döngüdür, genellikle çok fazla döngü gerektiren bir oyunda iyidir. (Benim bakış açıma göre daha yaygın olanı, bir tür "bitmiş" değişkeni yanlış olarak ayarlamak ve ardından oyunu sonlandırmak için bunu doğru yapmaktır ve döngü daha çok benzeyecektir while not done:.)


1

Bazı dillerde True sadece ve numara için takma addır. Boole mantığı hakkında daha fazla okuyarak bunun neden olduğunu daha fazla öğrenebilirsiniz .


1

Sorunuzu doğrudan cevaplamak için: döngü koşulu Doğru iken. Her zaman olduğu gibi, bu belirli kod parçasında.


0

whiledöngüler, koşul yanlış olana kadar döngüye devam eder. Örneğin (sözde kod):

i = 0
while i < 10
  i++

Döngünün her yinelemesiyle i, 10 olana kadar 1 artırılacaktır. Bu noktada, koşul i < 10artık doğru değildir ve döngü tamamlanacaktır.

İn koşulu while Trueaçıkça ve her zaman trueolduğundan, döngü asla sona ermeyecektir (başka bir yoldan, genellikle breakdöngü gövdesindeki gibi bir yapı tarafından kırılana kadar ).


0

Hiçbir şey Truedaha hızlı sonuç vermez True. Yani, kullanırsan iyidirwhile True yerine while 1==1vb. Kullanmanız .


0
while True:
    ...

sonsuz döngü anlamına gelir.

While ifadesi genellikle sonlu bir döngü için kullanılır. Ancak sabit 'True' kullanmak, kırmak istemediğiniz sürece, döngüyü kontrol etmeye gerek kalmadan (örneğin yinelemenin içinde bir boole değeri belirleme) while ifadesinin tekrarını garanti eder.

Aslında

True == (1 == 1)

0

Doğru, sonsuz döngü anlamına gelirken, bu genellikle uzun işlemlerle kullanılır. değiştirebilirsin

while True:

ile

while 1:

0

Bu cevapların çoğu değişen derecelerde doğru olsa da, hiçbiri istediğim kadar kısa ve öz değil.

Basitçe söylemek gerekirse kullanmak while True:, siz açıkça breakveya kullanarak çıkana kadar çalışmaya devam edecek bir döngü çalıştırmanın bir yoludur return. True her zaman True olarak değerlendirileceğinden, döngüyü istediğiniz zaman bitmeye zorlamanız gerekir.

while True:
    # do stuff

    if some_condition:
        break

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

Normalde bir döngü while koşulu yanlış olana veya önceden tanımlanmış bir bitiş noktasına ulaşıncaya kadar çalışacak şekilde ayarlanır:

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

Bu iki kod parçası aynı şeyi etkili bir şekilde yapıyor

Döngünüzün değerlendirdiği koşul muhtemelen doğrudan sizin kontrolünüzde olmayan bir değer ise, örneğin bir kullanıcı girdi değeri ise, o zaman verileri doğrulamak ve döngüden açık bir şekilde çıkmak genellikle gereklidir, bu nedenle bunu her iki yöntemle de yapmak isteyebilirsiniz. .

while TrueBunu biliyor beri format daha pythonic olduğunu break, oysa tam bu noktada döngü kırılıyor do_next = Falsebir sonraki değerlendirmesinden önce daha fazla şeyler yapabilirdi do_next.


-4

Tersi sunulana kadar her şey Doğru olarak alınabilir. Dualitenin çalışma şekli budur. Zıtların karşılaştırılmasının bir yolu. Siyah, beyaz olana kadar Doğru olabilir ve bu noktada Yanlış'dır. Siyah, beyaz olana kadar Yanlış olabilir ve bu noktada True olabilir. Bu bir durum değil, zıt durumların bir karşılaştırmasıdır. Eğer biri Doğru ise diğeri yanlıştır. Doğru, doğru olduğu veya kabul edildiği anlamına gelmez. Tersinin her zaman Yanlış olduğu bir durumdur. Dualitedir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.