2010-05-15 29 views
5

Soy un principiante con Python y estoy probando algunos programas. Tengo algo así como el siguiente constructo de bucle WHILE en Python (no es exacto).anidado WHILE loops en Python

IDLE 2.6.4  
>>> a=0 
>>> b=0 
>>> while a < 4: 
     a=a+1 
     while b < 4: 
     b=b+1 
     print a, b 


1 1 
1 2 
1 3 
1 4 

Estoy esperando el bucle externo para recorrer 1,2,3 y 4. Y sé que puedo hacer esto con bucle FOR como esto

>>> for a in range(1,5): 
     for b in range(1,5): 
      print a,b 


1 1 
1 2 
.. .. 
.. .. // Other lines omitted for brevity 
4 4 

Pero, ¿qué hay de malo en MIENTRAS ¿lazo? Supongo que me falta algo obvio, pero no pude entender.

Respuesta: el bucle while corregido ..

>>> a=0 
>>> b=0 
>>> while a < 4: 
    a=a+1 
    b=0 
    while b<4: 
     b=b+1 
     print a,b 


1 1 
.. .. 
.. .. // Other lines omitted for brevity 
4 4 

P.S: Buscado afuera así pues, se encontró few questions pero ninguno tan cercano a este. No sé si esto podría clasificarse como tarea, el programa real fue diferente, el problema es lo que me desconcierta.

Respuesta

7

No está restableciendo b en 0 dentro de su bucle externo, por lo que b se mantiene en el valor que tenía después del primer tramo del bucle externo - 4 - y el bucle interno nunca más se ejecuta.

Los bucles for funcionan bien porque hacen reinician sus variables de control de bucle correctamente; con los bucles menos estructurados while, dicho restablecimiento está en sus manos, y usted no lo está haciendo.