2010-09-20 16 views
45

Nivel: Principianteuna pregunta básica acerca de "mientras que la verdadera"

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

mi pregunta: mientras que lo que es verdad?

Creo que decir "si bien es cierto" es taquigrafia, pero ¿para qué? mientras que a la variable 'hand' se le asigna un valor? y ¿qué pasa si a la variable 'mano' no se le está asignando un valor?

+1

True es una especie de alias para 1. Se puede encontrar una especie de pregunta relacionada que hice aquí http://stackoverflow.com/questions/885908/while-1-vs-for-is-there-a-speed -difference – Copas

+13

@Copas, 'True' no es un alias para' 1'. Aunque en muchos idiomas '1' evalúa la verdad en el contexto booleano. – adamse

+2

adamse: en * algunas * versiones de Python, 'True' ha sido un alias para' 1', ¿no? Aunque sí, en las últimas versiones de Python hay un tipo booleano real. – Ken

Respuesta

74

while True significa lazo para siempre. La instrucción while toma una expresión y ejecuta el cuerpo del bucle mientras que la expresión se evalúa como (booleano) "verdadero". True siempre evalúa como booleano "verdadero" y así ejecuta el cuerpo del ciclo indefinidamente. ¡Es un modismo al que eventualmente te acostumbrarás! La mayoría de los idiomas con los que probablemente te encuentres tienen expresiones idiomáticas equivalentes.

Tenga en cuenta que la mayoría de los lenguajes suelen tener algún mecanismo para salir temprano del ciclo. En el caso de Python es la declaración break en el caso cmd == 'e' de la muestra en su pregunta.

+4

Para mayor claridad, creo que puede hacerlo mientras (verdadero == verdadero) en la mayoría de los idiomas. Esto puede ayudar a un nuevo programador a comprender mejor la lógica detrás de esto. – Chris

+7

Chris, 'while True == True' es feo. Es tan feo como 'while 'apples'! = 'Naranjas'' :) – dheerosaur

+2

@Chris: No veo cómo ayuda agregar sintaxis. –

6

mientras que True es verdadero, es decir, siempre. Este es un ciclo infinito

Tenga en cuenta la importante distinción aquí entre True que es una palabra clave en el lenguaje que denota un valor constante de un tipo particular, y 'verdadero' que es un concepto matemático.

+0

Técnicamente hablando, estás equivocado. La construcción significa "mientras que la verdad no es falsa". Puede ver la distinción si escribe 'while (5)' en C, donde no hay booleanos apropiados. No significa 'while (5 == 1)', significa 'while (5! = 0)'. – Blindy

+1

Creo que es más apropiado decir 'ciclo indefinido'; la suposición debe ser que el ciclo será interrumpido por un corte o retorno en algún punto. Los bucles verdaderamente "infinitos" son errores del programador; 'bucles indefinidos' son creados por diseño. –

+3

@Blindy: en un lenguaje débilmente tipado con conversión automática, puede decir que x 'evalúa' y ... no es mientras que 5 no es estrictamente igual a 0, mientras que 5 es ligeramente igual a Verdadero. –

2

True siempre es True, por lo que while True se repetirá para siempre.

La palabra clave while toma una expresión y realiza un bucle mientras la expresión es verdadera. True es una expresión que siempre es cierta.

Como ejemplo posiblemente aclarar, tenga en cuenta lo siguiente:

a = 1 
result = a == 1 

Aquí, a == 1 volverá True, y por lo tanto poner en Trueresult. Por lo tanto,

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

es equivalente a:

while True: 
    ... 

siempre y cuando no altere el valor de a dentro del bucle while.

+1

'True' is not * always *' True', p. Ej. 'True = False'. ;-) – jathanism

+0

@ jathanism- La verdad es la verdad, hasta el final de la cuenta. – dheerosaur

1

A while loop toma un argumento condicional (es decir, algo que generalmente es verdadero o falso, o puede interpretarse como tal), y solo se ejecuta mientras la condición produce True.

En cuanto a while True? ¡Bien, el condicional verdadero más simple es True sí mismo! Así que este es un ciclo infinito, generalmente bueno en un juego que requiere muchos bucles. (Más común desde mi punto de vista, sin embargo, es establecer algún tipo de variable "hecho" en falso y luego hacerlo verdadero para finalizar el juego, y el ciclo se parecería más al while not done: o lo que sea.)

0

while bucles continuar para repetir hasta que la condición sea falsa.Por ejemplo (pseudocódigo):

i = 0 
while i < 10 
    i++ 

Con cada iteración del bucle, i será incrementado en 1, hasta que es 10. En ese punto, la condición i < 10 ya no es cierto, y el bucle se completará.

Puesto que la condición en while True es explícitamente y siempre true, el bucle no tendrá fin (hasta que se rompe de alguna otra manera, por lo general por una construcción como break dentro del cuerpo del bucle).

1

En algunos idiomas True es justo y alias para el número. Puede obtener más información sobre por qué esto es al leer más acerca de boolean logic.

32

mi pregunta: while WHAT is True?

Mientras True es True.

El ciclo while se ejecutará mientras la expresión condicional evalúe True.

Desde True da siempre como resultado True, el bucle se ejecutará indefinidamente, hasta que algo dentro del bucle return s o break s.

+2

Esto es pitón. No hay una expresión entre paréntesis; P –

+0

heh, buen punto. No estoy acostumbrado a pensar en Python. Aunque supongo que podrías poner paréntesis si quisieras ... –

+0

Python tiene una sintaxis diferente – vol7ron

5

mi pregunta: while WHAT is True?

Todo dentro de la instrucción() de while se va a evaluar como booleano. Lo que significa que se convierte en verdadero o falso.

tener en cuenta en la declaración while(6 > 5)

Se evalúa primero la expresión 6 > 5 que es true también lo es lo mismo que decir while(true)

Todo lo que no es FALSO, 0, una cadena emptry "", null o indefinido es probable que se evalúe como verdadero.

Cuando comencé a programar solía hacer cosas como if(foo == true), no me di cuenta de que era prácticamente lo mismo que if(foo).

Así, cuando decimos while(true) es como están diciendo while(true == true)

Así contestarle pregunta: Aunque es verdad es verdad.

0

Nada se evalúa a True más rápido que True. Por lo tanto, es bueno si se utiliza en lugar de while Truewhile 1==1 etc.

+1

Lo más divertido que vi hoy! – Blindy

+0

@downvoter - ¿Puedo saber por qué? – dheerosaur

3

En este contexto, supongo que se podría interpretar como

do 
... 
while cmd != 'e' 
+1

+1: una reinterpretación sintáctica del ciclo – dawg

2

Formalmente, True es una pitón de built-in constantbool tipo.

Puede utilizar Boolean operations sobre los tipos bool (en el símbolo del pitón interactiva por ejemplo) y convert numbers en tipos 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 

Y hay "GOTCHA" potencialmente con lo que se ve y lo que el compilador de Python ve :

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

Como un indicio de cómo almacena Python bool tipos internos, que pueden emitir tipos bool a números enteros y Verdadero llegarán a ser 1 y False 0: 01

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

De hecho, Python bool tipo es una subclase de tipo de Python int:

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

La parte más importante de su pregunta es "¿Cuál es while True?" es 'lo que es verdadero' y un corolario importante: ¿qué es falso?

En primer lugar, para cada idioma que esté aprendiendo, aprenda lo que la lengua considera "verdad" y "falsey". Python considera Truth ligeramente diferente que Perl Truth por ejemplo. Otros idiomas tienen slightly different concepts de verdadero/falso. ¡Conoce lo que tu lenguaje considera verdadero y falso para diferentes operaciones y control de flujo para evitar muchos dolores de cabeza después!

Hay muchos algoritmos en los que desea procesar algo hasta que encuentre lo que está buscando. De ahí el infinite loop o ciclo indefinido. Cada idioma tiende a tener su propia expresión idiomática para estos constructos. Aquí son comunes C bucles infinitos, que también trabajan para Perl:

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

/* or */ 

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

La forma while True: es común en Python para bucles indefinidos con alguna forma de romper el bucle. Aprenda Python flow control para comprender cómo se salta de los bucles while True. A diferencia de la mayoría de los lenguajes, por ejemplo, Python puede tener una cláusula else en un bucle. Hay un ejemplo en el último enlace.

+0

@downvoter: ¿por qué? – dawg

0
while True: 
    ... 

significa bucle infinito.

La instrucción while a menudo se utiliza para un ciclo finito. Pero el uso de la constante 'Verdadero' garantiza la repetición de la instrucción while sin la necesidad de controlar el ciclo (por ejemplo, establecer un valor booleano dentro de la iteración), a menos que quiera romperlo.

De hecho

True == (1 == 1) 
0

while True bucle infinito media, esto por lo general el uso por largo proceso. puede cambiar

while True: 

con

while 1: 
0

Para responder a su pregunta directa: mientras que la condición del bucle es verdadera. Lo cual siempre es, en este fragmento de código en particular.

-1

Cualquier cosa puede tomarse como verdadera hasta que se presente lo contrario. Esta es la forma en que funciona la dualidad. Es una forma de comparar los opuestos. El negro puede ser verdadero hasta el blanco, en cuyo punto es falso. El negro también puede ser falso hasta que el blanco sea verdadero. No es un estado sino una comparación de estados opuestos. Si alguno de los dos es verdadero, el otro es incorrecto. Verdadero no significa que sea correcto o que sea aceptado. Es un estado donde lo opuesto siempre es falso. Es dualidad.

Cuestiones relacionadas