Вложенные циклы for Python

Доброго времени суток!

for i in range(0,4):
    for l in range(0,5):
        print(i, l)

У меня получается результат

0 0
0 1
0 2
0 3
0 4
1 0
1 1
1 2
1 3

и т.д

а надо чтобы было

0 0 1
0 1 2
0 2 3
0 3 4
0 4 5
1 0 6
1 1 7 
1 2 8
1 3 9

...

3 4 20

плз. подскажите


Ответы (2 шт):

Автор решения: MarianD

Вам достаточно применить только один цикл:

for i in range(1, 21): 
    print((i - 1) // 5, (i - 1) % 5, i)

Вывод:

0 0 1
0 1 2
0 2 3
0 3 4
0 4 5
1 0 6
1 1 7
1 2 8
1 3 9
1 4 10
2 0 11
2 1 12
2 2 13
2 3 14
2 4 15
3 0 16
3 1 17
3 2 18
3 3 19
3 4 20

Объяснение:

  1. В последнем столбце вы хотели числа от 1 до 20, потому последний параметр функции print() тот же самый, как переменная цикла (т.е. просто i).

  2. В первом и втором столбце вы хотите начинать с нуля, потому выражения в первом и втором столбце начинаются из (i - 1).

  3. Теперь, в первом столбце вы хотите 5 нулей, затем 5 единиц и т.д. Эти числа получим из последовательности 0, 1, 2, ..., 18, 19 как целочисленное деление (//) числом 5 (т.е. отброся остаток).

  4. Но и во втором столбце будет именно этот остаток (оператор % - деление по модулю, т.е. остаток от деления).


Примечание:

Функция range(1, 21) генерирует числа от 1 (включительно) до 21 (невключительно), т.е. числа 1, 2, 3, ...,19, 20 как вы, вероятно, хотели в последнем столбце.

Значит, как второй параметр нужно задать число на 1 больше, чем последнее желательное.

→ Ссылка
Автор решения: MarianD

Возможно также применить стандартную функцию divmod(), которая одновременно возвращает как результат целочисленного деления, так и остаток — в виде пары
(частное, остаток):

for i in range(1, 21):
    j, k = divmod(i, 5)
    print (j, k, i)
→ Ссылка