Próbuję napisać kod w Pythonie 3, który wypisuje macierz kwadratową z danych wejściowych użytkownika. Ponadto pierwszy wiersz tej macierzy musi być wypełniony liczbami od 1, n, drugi wiersz to pomnożenie pierwszego wiersza przez 2, trzeciego przez 3 itd., Aż do n-tego wiersza, który jest tworzony przez mnożenie pierwszego wiersza przez n. Udało mi się uzyskać kod do wydrukowania matrycy kwadratowej, ale nie rozumiem, jak mogę go zmodyfikować, aby drukował zgodnie z wcześniejszym opisem. Na przykład dla n = 3 powinienem mieć macierz: 1 2 3 (1. rząd), 2 4 6 (2. rząd) i 3 6 9 (3. rząd), ale zamiast tego otrzymam 1 2 3 (1. rząd), 4 5 6 (2. rząd) i 7 8 9 (3. rząd).

Mój kod:

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)))
1
nina 2 kwiecień 2020, 21:08

3 odpowiedzi

Najlepsza odpowiedź

Dopełniam tylko odpowiedź @ mix_42. Nie należy używać enumerate(range(n)), ponieważ enumerate zwraca krotkę dla każdego elementu w swoim argumencie. Więc dla n = 3, jeśli zrobisz list(enumerate(range(n))), będziesz mieć [(0, 0), (1, 1), (2, 2)] jako wyjście. Jeśli wszystkie indeksy są równe odpowiadającym im elementom, po co używać enumerate? Zamiast tego lepiej to zrób

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

Aby wydrukować matrycę:

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

Możesz zrobić print(i, row) w zewnętrznej pętli, aby lepiej zrozumieć, jak działa wyliczanie.

0
Caio Rocha 2 kwiecień 2020, 18:46

Możesz użyć:

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

Wynik:

1   2   3   4   
2   4   6   8   
3   6   9   12  
4   8   12  16  
0
kederrac 2 kwiecień 2020, 19:02

O ile rozumiem, problem dotyczy samej zawartości matrycy.

W takim przypadku python ma funkcję enumerate, którą można przechodzić w pętli jako taką:

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

Co dałoby następujący wynik:

0 a
1 b
2 c

Zasadniczo każda iteracja po wyliczonym obiekcie daje krotkę z indeksem iteracji i samym elementem (mówię to z czubka mojej głowy, nie jestem pewien, czy to jest krotka, czy nie. Zachęcam do przyjrzenia się dokładniej to w Google, ponieważ istnieje wiele świetnych przykładów).

Tak więc w twoim przypadku możesz wypełnić macierz, mnożąc indeks iteracji przez samą rzeczywistą wartość. Tak bym to zrobił:

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)

Co więcej, możesz użyć generatora, ale może to być nieco zagmatwane.

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

Mam nadzieję, że zrozumiałeś i proszę o komentarz, jeśli w mojej odpowiedzi są jakieś głupie błędy.

0
Kaito 2 kwiecień 2020, 19:04