2015-01-28 3 views
0

Кажется, я не могу об этом подумать. Я был бы признателен за помощь. Мне кажется, что функция for выполняет итерацию со скоростью n + 1 для каждой новой итерации, хотя я не могу понять, почему.Итерация и функция - Python

Вот мой код Python:

for n in range(2, 10): 
    print "This is %d" % n 
    for x in range(2, n): 
     print "%d" % n 

А вот выход в Powershell:

This is 2 
This is 3 
3 
This is 4 
4 
4 
This is 5 
5 
5 
5 
This is 6 
6 
6 
6 
6 
This is 7 
7 
7 
7 
7 
7 
This is 8 
8 
8 
8 
8 
8 
8 
This is 9 
9 
9 
9 
9 
9 
9 
9 

Почему это происходит?

+0

диапазон принимает три аргумента. диапазон (начало, остановка, шаг). u проходят старт и остановку. поэтому его печать должна быть – Taxellool

+0

@Raz отладочным кодом и посмотреть, как он работает шаг за шагом. Вы получите гораздо больше информации. –

+0

У меня нет отладчика. Что это? – Raz

ответ

0
for n in range(2, 10): 
    for x in range(2, n): 
     ... 

У вас есть вложенные петли. Верхняя граница внутреннего контура равна , текущему значению значения внешняя петля.

Внешний контур будет итерацию от 2 (вкл.) До 10 (вкл.):

  1. На первой итерации, n является 2. Таким образом, внутренний цикл будет итерации от 2 (вкл.) До 2 (за исключением). Поскольку верхняя граница фактически равна нижней границе, внутренний цикл не повторяется.
  2. На второй итерации внешней петли, n - 3. Таким образом, внутренний цикл будет проходить от 2 (включая) до 3 (исключая). Таким образом, существует один итерации цикла внутренней с x = 2
  3. На третьей итерации внешнего цикла, n является 4. Таким образом, внутренний цикл будет проходить от 2 (вкл.) До 4 (исключая). Существует две итерации внутреннего контура (x = 2 и x = 3).

И так далее ...

+0

Спасибо Сильвиан – Raz

1

Конечное значение для диапазона не входит, поэтому диапазон от 2 до 2 не включает в себя какие-либо значения. Затем вы создаете диапазон от 2 до 3, который только включает в себя стоимость 2 и т.д.

Как таковой, вы производите петлю, петли БУДУТ n - 2 раз, где n петли от 2 до 9 включительно, и каждого внутреннего цикла петли от 2 до n - 1 включительно.

Для каждого вложенного цикла вы снова печатаете n, который не изменяется во внутреннем цикле. Попробуйте напечатать x вместо этого, или еще лучше, печатать его вместе:

for n in range(2, 10): 
    print "This is %d" % n 
    for x in range(2, n): 
     print "n=%d, x=%d" % (n, x) 

Для каждого n это будет печатать значения для x от 2 до n - 1 включительно:

>>> for n in range(2, 10): 
...  print "This is %d" % n 
...  for x in range(2, n): 
...   print "n=%d, x=%d" % (n, x) 
... 
This is 2 
This is 3 
n=3, x=2 
This is 4 
n=4, x=2 
n=4, x=3 
This is 5 
n=5, x=2 
n=5, x=3 
n=5, x=4 
This is 6 
n=6, x=2 
n=6, x=3 
n=6, x=4 
n=6, x=5 
This is 7 
n=7, x=2 
n=7, x=3 
n=7, x=4 
n=7, x=5 
n=7, x=6 
This is 8 
n=8, x=2 
n=8, x=3 
n=8, x=4 
n=8, x=5 
n=8, x=6 
n=8, x=7 
This is 9 
n=9, x=2 
n=9, x=3 
n=9, x=4 
n=9, x=5 
n=9, x=6 
n=9, x=7 
n=9, x=8 
+0

Но почему 4 печатаются дважды, а 5 три раза, а шесть четыре раза и т. Д.? – Raz

+0

Почему это петля n - 2 раза? – Raz

+0

'4' печатается дважды, потому что вы его закодировали. У вас есть внутренний цикл 'для x в диапазоне (2, n):' и если n - '4', он перебирает значения' 2' и '3'. Вы хотите напечатать 'x' вместо? – Matthias

0

Я думаю, теперь я понимаю. В каждой отдельной итерации первого цикла цикла второй цикл foor будет повторяться один раз для каждого значения «x» между 2 и n.

Итак, если n равно 7, первый цикл цикла будет повторяться один раз для числа 7, а второй цикл цикла будет повторяться один раз для каждого значения между 2 и 7 (то есть 5 раз).

Смежные вопросы