Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nested WHILE loops in Python

I am a beginner with Python and trying few programs. I have something like the following WHILE loop construct in Python (not exact).

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

I am expecting the outer loop to loop through 1,2,3 and 4. And I know I can do this with FOR loop like this

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

But, what is wrong with WHILE loop? I guess I am missing some thing obvious, but could not make out.

Answer: The corrected WHILE loop..

>>> a=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: Searched out SO, found few questions but none as close to this. Don't know whether this could classified as homework, the actual program was different, the problem is what puzzles me.

like image 579
Guru Avatar asked May 15 '10 19:05

Guru


People also ask

Can you have nested while loops Python?

When a while loop is used inside another while loop then it is called nested while loop in Python. Python allows using one loop inside another loop.

What is a nested while loop?

A nested while loop is a while statement inside another while statement. In a nested while loop, one iteration of the outer loop is first executed, after which the inner loop is executed. The execution of the inner loop continues till the condition described in the inner loop is satisfied.

Can a for loop be nested in a while loop Python?

You can put a for loop inside a while, or a while inside a for, or a for inside a for, or a while inside a while.


1 Answers

You're not resetting b to 0 right inside your outer loop, so b stays at the value it had after the first leg of the outer loop -- 4 -- and the inner loop never executes again.

The for loops work fine because they do reset their loop control variables correctly; with the less-structured while loops, such resetting is in your hands, and you're not doing it.

like image 176
Alex Martelli Avatar answered Nov 15 '22 08:11

Alex Martelli