range(5)
выдаст значения от 0 до 4 - на единицу меньше, чем введенное число.
i = 5
j = i # this is overwritten by the loop-j
for _ in range(i): # on the first i
for j in range(j): # j will get 4 at max, so for the next i your j
print('0', end=" ") # only produce a range(4), then (3) ... hence: triangular
print()
Ваш внутренний цикл j
перезаписывает ваш локальный j
и из-за природы range()
он будет уменьшаться на 1 для каждого внешнего цикла.
Исправлено:
Вам не нужны именованные циклические переменные, замените их _
:
def ar(i):
for _ in range(i):
for _ in range(i): # no j needed at all
print('0', end=" ")
print()
ar(5)
Выход:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0