Cosa significa "while True" in Python?


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

Mentre COSA è vero?

Penso che dire "mentre vero" sia una scorciatoia, ma per cosa? Mentre alla variabile 'mano' viene assegnato un valore? E se alla variabile "mano" non viene assegnato un valore?


1
True è una specie di alias per 1. Una sorta di domanda correlata che ho posto può essere trovata qui stackoverflow.com/questions/885908/…
Copas

18
@ Copas, Truenon è un alias per 1. Sebbene in molte lingue 1valuti la verità in un contesto booleano.
adamse,

2
adamse: In alcune versioni di Python, Trueè stato un alias per 1, no? Anche se sì, nelle ultime versioni di Python esiste un vero tipo booleano.
Ken

1
@adamse, @Ken: citando da What's new in Python 2.3 - PEP 285 : "Un tipo booleano è stato aggiunto a Python 2.3. Due nuove costanti sono state aggiunte al __builtin__modulo, True e False. (Le costanti True e False sono state aggiunte -ins in Python 2.2.1, ma le versioni 2.2.1 sono semplicemente impostate su valori interi di 1 e 0 e non sono di tipo diverso.) ".
Cristian Ciupitu

@adamse In Python non lo è, tuttavia in molte lingue lo è. La consideravo una domanda più generale. Parlare a un principiante come Baba ha detto che era "Vero è una specie di alias per 1" è perfettamente accurato. Sono d'accordo in Python True non è un alias per 1. Non ho detto che lo fosse.
Copas

Risposte:


109

while Truesignifica loop per sempre. L' whileistruzione accetta un'espressione ed esegue il corpo del ciclo mentre l'espressione restituisce (booleano) "true". Truerestituisce sempre booleano "true" e quindi esegue il corpo del ciclo a tempo indeterminato. È un idioma a cui ti abituerai alla fine! La maggior parte delle lingue che probabilmente incontrerai hanno idiomi equivalenti.

Nota che la maggior parte delle lingue di solito ha un meccanismo per uscire presto dal ciclo. Nel caso di Python è la breakdichiarazione nel cmd == 'e'caso del campione nella tua domanda.


9
Per motivi di chiarezza, credo che tu possa fare while (true == true) nella maggior parte delle lingue. Questo può aiutare un nuovo programmatore a comprendere meglio la logica che c'è dietro.
Chris,

10
Chris, while True==Trueè brutto. È brutto come while 'apples'!='oranges':)
dheerosaur

35
Come ha sottolineato uno dei miei insegnanti: se pensi che true==truesia un miglioramento, dove ti fermi? Non (true==true)==truesarebbe anche meglio?
Ken

11
@ Chris, alla fine si dovrebbe essere consapevoli che un valore booleano o una variabile può essere utilizzato al posto di un'espressione logica, e "eventualmente" dovrebbe essere il prima possibile.
Mark Ransom

6
@Mark alla fine si dovrebbe essere consapevoli che a volte ci vuole un po 'di aiuto aggiuntivo per ottenere un nuovo programmatore per comprendere la logica booleana e simili. Tutto quello che stavo cercando di fare era aiutarlo a capirlo.
Chris,

53

la mia domanda: mentre COSA è vero?

Mentre Trueè True.

Il ciclo while verrà eseguito fintanto che l'espressione condizionale restituisce True.

Poiché Truerestituisce sempre a True, il ciclo verrà eseguito indefinitamente, fino a quando qualcosa all'interno del ciclo returns o breaks.


4
Questo è Python. Non ci sono espressioni tra parentesi; P
Mike Axiak,

heh, buon punto. Non sono abituato a pensare in Python. Anche se suppongo che potresti mettere i genitori intorno se vuoi ...
Dagg Nabbit,

10

la mia domanda: mentre COSA è vero?

Tutto ciò che si trova all'interno di () dell'istruzione while verrà valutato come booleano. Significa che viene convertito in vero o falso.

Considera nella dichiarazione while(6 > 5)

Prima valuta l'espressione 6 > 5che è truecosì è come direwhile(true)

Tutto ciò che non è FALSE, 0, una stringa vuota "", null o undefined è probabile che venga valutato come vero.

Quando ho iniziato a programmare per la prima volta facevo cose del tipo if(foo == true), non mi rendevo conto che era praticamente la stessa cosa di if(foo).

Quindi quando dici è while(true)come stai dicendowhile(true == true)

Quindi, per rispondere alla tua domanda: mentre VERO è vero.


10

mentre Trueè vero - cioè sempre. Questo è un ciclo infinito

Notare l'importante distinzione qui tra Trueche è una parola chiave nella lingua che denota un valore costante di un tipo particolare e "vero" che è un concetto matematico.


Tecnicamente parlando, ti sbagli. Il costrutto significa "mentre vero non è falso". Puoi vedere la distinzione se scrivi while(5)in C, dove non ci sono valori booleani appropriati. Non significa while(5==1), significa while(5!=0).
Blindy

2
Penso che sia più appropriato dire "ciclo indefinito"; il presupposto deve essere che il ciclo verrà interrotto da una pausa o da un ritorno ad un certo punto. I loop veramente "infiniti" sono un errore del programmatore; I "cicli indefiniti" vengono creati in base alla progettazione.
Dagg Nabbit,

3
@Blindy: in un linguaggio debolmente tipizzato con casting automatico, puoi dire che x "restituisce" y ... non è mentre 5 non è strettamente uguale a 0, è mentre 5 è vagamente uguale a True.
Dagg Nabbit,

@ Blindy, while(5)in C significa mentre 5è vero, non mentre è trueo 0, che è qualcosa di completamente diverso. 5è sempre vero. In generale, quando le lingue hanno una parola chiave true, è una costante vera, ma non l'unica costante vera. Allo stesso modo falsenon è necessariamente l'unico valore falso.
Chris Dodd,

4

In questo contesto, suppongo che possa essere interpretato come

do
...
while cmd  != 'e' 

3

Trueè sempre True, quindi while Trueverrà ripetuto per sempre.

La whileparola chiave accetta un'espressione e viene ripetuta finché l'espressione è vera. Trueè un'espressione che è sempre vera.

Come possibile esempio chiarificatore, considera quanto segue:

a = 1
result = a == 1

Qui, a == 1tornerà True, e quindi messo Truein result. Quindi,

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

è equivalente a:

while True:
  ...

a condizione di non alterare il valore di aall'interno del whileciclo.


1
Truenon è sempre True , ad es True = False. ;-)
jathanism

1
@ jathanism- La verità è verità, fino alla fine della resa dei conti.
dheerosaur

3

Formalmente, Trueè una costante incorporata in Python di tipo bool .

È possibile utilizzare operazioni booleane sui tipi bool (ad esempio al prompt interattivo di Python) e convertire i numeri in tipi bool:

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

E ci sono potenzialmente "trucchi" con ciò che vedi e ciò che vede il compilatore 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

Come suggerimento su come Python memorizza i tipi bool internamente, puoi eseguire il cast di tipi bool a numeri interi e True risulterà essere 1 e False 0:

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

In effetti, il booltipo Python è una sottoclasse del inttipo Python :

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

La parte più importante della tua domanda è "Che cos'è while True?" è "ciò che è vero" e un importante corollario: cosa è falso?

In primo luogo, per ogni lingua che stai imparando, impara ciò che la lingua considera "veritiera" e "falsa". Python considera Truth in modo leggermente diverso da Perl Truth, ad esempio. Altre lingue hanno concetti leggermente diversi di vero / falso. Impara cosa la tua lingua considera Vero e Falso per diverse operazioni e controllo del flusso per evitare molti mal di testa in seguito!

Ci sono molti algoritmi in cui vuoi elaborare qualcosa finché non trovi quello che stai cercando. Da qui il ciclo infinito o ciclo indefinito. Ogni lingua tende ad avere il proprio idioma per questi costrutti. Ecco i comuni loop infiniti in C, che funzionano anche per Perl:

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

/* or */

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

La while True:forma è comune in Python per cicli indefiniti con qualche modo per uscire dal ciclo. Impara il controllo del flusso Python per capire come superare i while Trueloop. A differenza della maggior parte dei linguaggi, ad esempio, Python può avere una elseclausola su un ciclo. C'è un esempio nell'ultimo collegamento.


1

Un whileciclo accetta un argomento condizionale (che significa qualcosa che è generalmente vero o falso, o può essere interpretato come tale), e viene eseguito solo mentre la condizione cede True.

Per quanto while True? Ebbene, il vero condizionale più semplice è Truese stesso! Quindi questo è un loop infinito, di solito buono in un gioco che richiede molti loop. (Più comune dal mio punto di vista, tuttavia, è impostare una sorta di variabile "done" su false e quindi renderla vera per terminare il gioco, e il ciclo sarebbe più simile while not done:o qualsiasi altra cosa.)


1

In alcune lingue True è giusto e alias per il numero. Puoi saperne di più sul motivo leggendo di più sulla logica booleana .


1

Per rispondere direttamente alla tua domanda: mentre la condizione del ciclo è True. Che è sempre, in questo particolare bit di codice.


0

whilei cicli continuano a ripetersi finché la condizione non è falsa. Ad esempio (pseudocodice):

i = 0
while i < 10
  i++

Ad ogni iterazione del ciclo, iverrà incrementato di 1, fino a diventare 10. A quel punto, la condizione i < 10non è più vera e il ciclo verrà completato.

Poiché la condizione in while Trueè esplicitamente e sempre true, il ciclo non finirà mai (fino a quando non viene interrotto in qualche altro modo, di solito da un costrutto come breakall'interno del corpo del ciclo).


0

Niente viene valutato Truepiù velocemente di True. Quindi, è buono se usi while Trueinvece di while 1==1ecc.


0
while True:
    ...

significa ciclo infinito.

L'istruzione while viene spesso utilizzata di un ciclo finito. Ma l'uso della costante "True" garantisce la ripetizione dell'istruzione while senza la necessità di controllare il ciclo (ad esempio impostando un valore booleano all'interno dell'iterazione), a meno che non si desideri interromperlo.

Infatti

True == (1 == 1)

0

mentre True significa ciclo infinito, questo di solito viene utilizzato per processi lunghi. si può cambiare

while True:

con

while 1:

0

Sebbene la maggior parte di queste risposte siano corrette a vari livelli, nessuna di esse è succinta come vorrei.

In parole povere, usare while True:è solo un modo per eseguire un ciclo che continuerà a funzionare fino a quando non lo si interrompe esplicitamente usando breako return. Poiché True restituirà sempre True, è necessario forzare la fine del ciclo quando lo si desidera.

while True:
    # do stuff

    if some_condition:
        break

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

Mentre normalmente un ciclo sarebbe impostato per essere eseguito fino a quando la condizione while non è falsa o raggiunge un punto finale predefinito:

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

Quei due blocchi di codice fanno effettivamente la stessa cosa

Se la condizione in base alla quale il tuo ciclo valuta è forse un valore non direttamente nel tuo controllo, come un valore di input dell'utente, di solito è necessario convalidare i dati e interrompere esplicitamente il ciclo, quindi dovresti farlo con entrambi i metodi .

Il while Trueformato è più pitonico poiché sai che breaksta interrompendo il ciclo in quel punto esatto, mentre do_next = Falsepotresti fare più cose prima della prossima valutazione di do_next.


-4

Tutto può essere considerato vero fino a quando non viene presentato il contrario. Questo è il modo in cui funziona la dualità. È un modo per confrontare gli opposti. Il nero può essere vero fino al bianco, a quel punto è falso. Il nero può anche essere falso fino al bianco, a quel punto è vero. Non è uno stato ma un confronto di stati opposti. Se uno dei due è vero, l'altro è sbagliato. Vero non significa che sia corretto o sia accettato. È uno stato in cui l'opposto è sempre Falso. È dualità.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.