Почему этот код не создает квадратный 2d-массив? Что делает его треугольным? - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь напечатать квадратный двумерный массив нулей.Я не понимаю, почему я продолжаю получать треугольную форму с этим кодом.Почему с каждой строкой, которую я печатаю, я печатаю на один столбец меньше?

def ar(i):
    j = i
    for i in range(i):
        for j in range(j):
            print('0', end=" ")
        print()

1 Ответ

1 голос
/ 05 апреля 2019

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