Как напечатать квадратную матрицу без numpy? - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь написать python 3 код, который выводит квадратную матрицу из пользовательского ввода. Кроме того, первая строка этой матрицы должна быть заполнена числами от 1, n, вторая строка - это умножение первой строки на 2, третьей на 3 и т. Д. c. До n-й строки, которая равна созданный первой строкой, умноженной на n. Мне удалось заставить мой код распечатать квадратную матрицу, но я не понимаю, как я мог изменить ее так, чтобы она печаталась в соответствии с более ранним описанием. Так, например, для n = 3 у меня должна быть матрица: 1 2 3 (1-й ряд), 2 4 6 (2-й ряд) и 3 6 9 (3-й ряд), но вместо этого я получаю 1 2 3 (1-й ряд), 4 5 6 (2-й ряд) и 7 8 9 (3-й ряд).

Мой код:

n = int(input("Enter dimensions of matrix :"))
m = n
x = 1
columns = []
for row in range(n):
    inner_column = []
    for col in range(m):
        inner_column.append(x)
        x = x + 1
    columns.append(inner_column)
for inner_column in columns:
    print(' '.join(map(str, inner_column)))

Ответы [ 3 ]

0 голосов
/ 02 апреля 2020

Насколько я понимаю, у вас проблемы с содержимым самой матрицы.

В этом случае python имеет функцию enumerate, которая может быть зациклена таким образом:

ls = ['a', 'b', 'c'] 
for n, i in enumerate(ls):
  print(n, i)

Что даст следующий вывод:

0 a
1 b
2 c

По существу, каждая итерация по перечисляемому объекту дает кортеж с индексом итерации и самим элементом (я говорю это Вверху головы, я не уверен, является ли это кортежем или нет. Я рекомендую заглянуть дальше в Google, так как есть много отличных примеров).

Так что, в вашем случае, вы можете заполнить матрица путем умножения индекса итерации на само фактическое значение. Вот как я бы это сделал:

for it, n in enumerate(range(n)):
  arr = []
  for col in range(n): # since its a square matrix, you can reuse n
    arr.append((col+1)*(it+1))
  matrix.append(arr)

Еще лучше, вы можете использовать генератор, но это может немного сбить с толку.

for it, num in enumerate(range(n)):
  matrix.append([(col+1)*(it+1) for col in range(n)])

Надеюсь, вы поняли, и, пожалуйста, прокомментируйте, если в моем ответе есть какие-то глупые ошибки.

0 голосов
/ 02 апреля 2020

Просто дополняю ответ @ mix_42. Не следует использовать enumerate(range(n)), поскольку enumerate возвращает кортеж для каждого элемента в своем аргументе. Так что для n = 3, если вы сделаете list(enumerate(range(n))), вы получите [(0, 0), (1, 1), (2, 2)] в качестве вывода. Если все индексы равны соответствующим элементам, зачем использовать enumerate? Вместо этого лучше сделать

matrix=[]
for i in range(1, n+1):
  matrix.append([col*i for col in range(1, n+1)])

Для печати матрицы:

for i, row in enumerate(matrix):
    for col in matrix[i]:
        print(col,end='\t')
    print('\n')

Вы можете сделать print(i, row) во внешнем l oop, чтобы лучше понять, как работает перечисление.

0 голосов
/ 02 апреля 2020

вы можете использовать:

n = int(input("Enter dimensions of matrix :"))
m = n
columns = []
for row in range(1, n +1):
    inner_column = []
    for  col in range(row, n*row + 1, row):
        inner_column.append(col)
    columns.append(inner_column)
for inner_column in columns:
    print(''.join([e.ljust(4) for e in map(str, inner_column)]))
# input 4

вывод:

1   2   3   4   
2   4   6   8   
3   6   9   12  
4   8   12  16  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...