Вложенные циклы WHILE в Python - PullRequest
5 голосов
/ 15 мая 2010

Я новичок в Python и пробую несколько программ. У меня есть что-то вроде следующей конструкции цикла WHILE в 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

Я ожидаю, что внешний цикл будет проходить через 1,2,3 и 4. И я знаю, что могу сделать это с помощью цикла FOR, как это

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

Но что не так с циклом WHILE? Наверное, я упускаю что-то очевидное, но не могу разобрать.

Ответ: Исправленный цикл WHILE ..

>>> 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 : Обнаружено SO, найдено несколько вопросов , но ни один из них не был близок к этому. Не знаю, может ли это быть классифицировано как домашнее задание, реальная программа была другой, проблема в том, что меня озадачивает.

1 Ответ

7 голосов
/ 15 мая 2010

Вы не сбрасываете b в 0 прямо внутри вашего внешнего цикла, поэтому b остается на значении, которое было у него после первого этапа внешнего цикла - 4 - и внутренний цикл никогда не выполняется снова.

Циклы for работают нормально, потому что они do правильно сбрасывают свои переменные управления циклами; с менее структурированными циклами while такой сброс у вас в руках, а вы этого не делаете.

...