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."
A CO jest prawdą?
Wydaje mi się, że powiedzenie „póki prawda” jest skrótem, ale po co? Podczas gdy zmiennej „ręka” przypisywana jest wartość? A co, jeśli zmiennej „ręka” nie przypisuje się wartości?
True
nie jest aliasem dla1
. Chociaż w wielu językach1
ocenia się zgodnie z prawdą w kontekście logicznym.True
był alias1
, nie? Chociaż tak, w najnowszych wersjach Pythona istnieje prawdziwy typ boolowski.__builtin__
modułu, True i False. (Stałe True i False zostały dodane do zbudowanego -ins w Pythonie 2.2.1, ale wersje 2.2.1 są po prostu ustawiane na wartości całkowite 1 i 0 i nie są innego typu.) ".Odpowiedzi:
while True
oznacza pętlę na zawsze.while
Oświadczenie bierze wyrażenie i wykonuje ciało pętli natomiast ocenia wyraz (logiczna) „true”.True
zawsze oblicza wartość logiczną „prawda” i dlatego wykonuje treść pętli w nieskończoność. To idiom, do którego w końcu się przyzwyczaisz! Większość języków, z którymi możesz się spotkać, ma równoważne idiomy.Zauważ, że większość języków ma zwykle jakiś mechanizm wczesnego wyrwania się z pętli. W przypadku Pythona jest to
break
stwierdzenie wcmd == 'e'
przypadku próbki w Twoim pytaniu.źródło
while True==True
jest brzydki. Jest tak brzydki jakwhile 'apples'!='oranges'
:)true==true
to poprawa, na czym się zatrzymujesz? Nie(true==true)==true
byłoby jeszcze lepiej?Podczas
True
jestTrue
.Pętla while będzie działać tak długo, jak długo obliczane jest wyrażenie warunkowe
True
.Ponieważ
True
zawsze obliczana jest naTrue
, pętla będzie działać w nieskończoność, aż do pojawienia się czegoś w pętlireturn
s lubbreak
s.źródło
Wszystko wewnątrz () instrukcji while zostanie ocenione jako wartość logiczna. Oznacza to, że jest konwertowany na prawdę lub fałsz.
Rozważ w oświadczeniu
while(6 > 5)
Najpierw ocenia wyrażenie,
6 > 5
które jesttrue
tak, to to samo, co powiedzeniewhile(true)
Wszystko, co nie jest FALSE, 0, pusty ciąg znaków „”, null lub undefined, zostanie prawdopodobnie ocenione jako prawda.
Kiedy zaczynałem programować, robiłem takie rzeczy jak
if(foo == true)
, nie zdawałem sobie sprawy, że to właściwie to samo, coif(foo)
.Więc kiedy mówisz,
while(true)
to tak jak mówiszwhile(true == true)
A więc odpowiadając na pytanie: Podczas gdy PRAWDA jest Prawdą.
źródło
podczas
True
jest prawdą - tj. zawsze. To jest nieskończona pętlaZwróć uwagę na ważne rozróżnienie między tym,
True
co jest słowem kluczowym w języku, oznaczającym stałą wartość określonego typu, a „prawdą”, które jest pojęciem matematycznym.źródło
while(5)
w języku C, gdzie nie ma odpowiednich wartości logicznych. To nie znaczywhile(5==1)
, to znaczywhile(5!=0)
.while(5)
w języku C oznacza, że5
jest prawdziwe, a nie gdy jest totrue
lub0
, co jest czymś zupełnie innym.5
jest zawsze prawdą. Ogólnie rzecz biorąc, gdy języki mają słowo kluczowetrue
, jego stała jest prawdziwa, ale nie jedyna stała, która jest prawdziwa. Podobniefalse
niekoniecznie jest jedyną wartością, która jest fałszywa.W tym kontekście przypuszczam, że można to interpretować jako
do ... while cmd != 'e'
źródło
True
jest zawszeTrue
takwhile True
pętla będzie trwać wiecznie.Słowo
while
kluczowe przyjmuje wyrażenie i wykonuje pętlę, gdy wyrażenie jest prawdziwe.True
to wyrażenie, które jest zawsze prawdziwe.Jako potencjalnie wyjaśniający przykład rozważ następujące kwestie:
a = 1 result = a == 1
Tutaj
a == 1
wróciTrue
, a zatem zostanie umieszczonyTrue
wresult
. W związku z tym,a = 1 while a == 1: ...
jest równa:
while True: ...
pod warunkiem, że nie zmienisz wartości
a
wewnątrzwhile
pętli.źródło
True
nie zawszeTrue
, npTrue = False
. ;-)Formalnie
True
jest Python wbudowaną stałą z bool typu.Możesz używać operacji logicznych na typach boolowych (na przykład w interaktywnym pytaniu Pythona) i konwertować liczby na typy boolowe:
>>> 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
I są potencjalnie "gotcha" z tym, co widzisz i co widzi kompilator Pythona:
>>> 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
Aby podpowiedzieć, jak Python przechowuje typy bool wewnętrznie, możesz rzutować typy bool na liczby całkowite, a True okaże się 1 i False 0:
>>> print True+0 1 >>> print True+1 2 >>> print False+0 0 >>> print False+1 1
W rzeczywistości
bool
typ Pythona jest podklasą typu Pythonaint
:>>> type(True) <type 'bool'> >>> isinstance(True, int) True
Ważniejsza część twojego pytania brzmi: „Co jest
while True
?” to „co jest prawdą” i ważny wniosek: co jest fałszywe?Po pierwsze, dla każdego języka, którego się uczysz, dowiedz się, co język uważa za „prawdziwe” i „fałszywe”. Python traktuje Prawdę nieco inaczej niż na przykład Perl Truth . Inne języki mają nieco inne koncepcje prawda / fałsz. Dowiedz się, co Twój język uważa za prawdę i fałsz dla różnych operacji i kontroluj przepływ, aby później uniknąć wielu problemów!
Istnieje wiele algorytmów, w których chcesz coś przetworzyć, dopóki nie znajdziesz tego, czego szukasz. Stąd nieskończona pętla lub nieokreślona pętla. Każdy język ma swój własny idiom dla tych konstrukcji. Oto typowe nieskończone pętle C, które działają również w Perlu:
for(;;) { /* loop until break */ } /* or */ while (1) { return if (function(arg) > 3); }
while True:
Forma jest powszechne w Pythonie nieokreślonym pętli z jakiś sposób wyłamywania pętli. Naucz się sterowania przepływem w języku Python, aby zrozumieć, w jaki sposób wychodzisz zwhile True
pętli. W przeciwieństwie do większości języków, na przykład Python może miećelse
klauzulę w pętli. W ostatnim linku jest przykład.źródło
while
Pętla trwa warunkowa argument (co oznacza, że coś jest na ogół albo prawdziwe lub fałszywe, lub mogą być interpretowane jako takie), i wykonuje tylko przy rentowności stanTrue
.Co do
while True
? Cóż, najprostszy prawdziwy warunek jestTrue
sam w sobie! Jest to więc nieskończona pętla, zwykle dobra w grze, która wymaga wielu pętli. (Z mojej perspektywy bardziej powszechne jest jednak ustawienie jakiejś zmiennej „done” na false, a następnie ustawienie tej wartości jako true, aby zakończyć grę, a pętla będzie wyglądać bardziej jakwhile not done:
lub cokolwiek innego.)źródło
W niektórych językach True to just i alias dla liczby. Możesz dowiedzieć się więcej, dlaczego tak się dzieje, czytając więcej o logice boolowskiej .
źródło
Odpowiadając bezpośrednio na twoje pytanie: gdy warunek pętli jest prawdziwy. Który zawsze jest, w tym konkretnym fragmencie kodu.
źródło
while
pętle są kontynuowane, dopóki warunek nie będzie fałszywy. Na przykład (pseudokod):i = 0 while i < 10 i++
Z każdą iteracją pętli
i
będzie zwiększana o 1, aż do 10. W tym momencie waruneki < 10
nie jest już prawdziwy i pętla zostanie zakończona.Ponieważ warunek w
while True
jest jawny i zawszetrue
, pętla nigdy się nie zakończy (dopóki nie zostanie przerwana w inny sposób, zwykle przez konstrukcję taką jakbreak
w treści pętli).źródło
Nic nie ocenia się
True
szybciej niżTrue
. Więc dobrze, jeśli używaszwhile True
zamiastwhile 1==1
itp.źródło
while True: ...
oznacza nieskończoną pętlę.
Instrukcja while jest często używana jako pętla skończona. Jednak użycie stałej „True” gwarantuje powtórzenie instrukcji while bez konieczności kontrolowania pętli (na przykład ustawiania wartości logicznej wewnątrz iteracji), chyba że chcesz ją przerwać.
w rzeczywistości
True == (1 == 1)
źródło
podczas gdy prawdziwa średnia nieskończona pętla, zwykle jest używana przez długi proces. możesz się zmienić
while True:
z
while 1:
źródło
Chociaż większość z tych odpowiedzi jest poprawna w różnym stopniu, żadna z nich nie jest tak zwięzła, jak bym chciał.
Mówiąc prościej, użycie
while True:
jest po prostu sposobem na uruchomienie pętli, która będzie działać, dopóki nie zostanie wyraźnie z niej przerwana za pomocąbreak
lubreturn
. Ponieważ True zawsze oblicza wartość True, musisz wymusić zakończenie pętli, kiedy chcesz.while True: # do stuff if some_condition: break # do more stuff - code here WILL NOT execute when `if some_condition:` evaluates to True
Podczas gdy normalnie pętla byłaby uruchamiana do momentu, gdy warunek while będzie fałszywy lub osiągnie predefiniowany punkt końcowy:
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
Te dwa fragmenty kodu skutecznie robią to samo
Jeśli warunek, względem którego ocenia pętlę, jest prawdopodobnie wartością, która nie znajduje się bezpośrednio w Twojej kontroli, na przykład wartość wprowadzona przez użytkownika, wówczas walidacja danych i jawne przerwanie pętli jest zwykle konieczne, więc chcesz to zrobić za pomocą dowolnej metody .
while True
Format jest bardziej pythonic ponieważ wiesz, żebreak
łamie pętli przy tym dokładnie momencie, podczas gdydo_next = False
mógłby zrobić więcej rzeczy przed kolejną ocenądo_next
.źródło
Wszystko można uznać za Prawdę, dopóki nie zostanie przedstawione przeciwieństwo. Tak działa dualność. Jest to sposób porównywania przeciwieństw. Czarny może być prawdziwy aż do białego, w którym to momencie jest fałszywy. Czarny może być również fałszywy, dopóki biały nie jest prawdą. To nie jest stan, ale porównanie stanów przeciwnych. Jeśli jedno jest prawdziwe, drugie jest złe. Prawda nie oznacza, że jest poprawna lub jest akceptowana. Jest to stan, w którym przeciwieństwo jest zawsze fałszywe. To jest dwoistość.
źródło