gvnnz / tris

1 stars 0 forks source link

Nuova funzione `get_matrix_column` #5

Closed gvnnz closed 7 months ago

gvnnz commented 8 months ago

@Ace-Miky scrivi una funzione get_matrix_column per ottenere la colonna di una matrice.

La funzione prende in input una matrice e un intero che indica la colonna che ti interessa. La funzione poi ritorna una lista con tutti i valori della colonna.

Ace-Miky commented 8 months ago

@gvnnz


def get_matrix_column(matrix, n):
    return [matrix[0][n], matrix[1][n], matrix[2][n]]

Immagino che però dovrò renderla generica... Questa è specifica per la nostra matrice 3x3

gvnnz commented 8 months ago

Sì, così funziona solo per una 3x3, noi la vogliamo generica. Comunque l'idea di base è giusta: ritornare una nuova lista riempita con i valori delle colonne.

Ace-Miky commented 8 months ago

@gvnnz Questa è top! Poi la faccio con il ciclo for?


def get_matrix_column(matrix, n):
    count = 0
    column_list = []
    while True:
        if count < len(matrix[0]):
            column_list.append(matrix[count][n])
            count = count + 1
        else:
            break
    return column_list
Ace-Miky commented 8 months ago

@gvnnz Facciamo così?


def get_matrix_column(matrix, n):
    count = 0
    column_list = []
    for element in matrix[0]:
        column_list.append(matrix[count][n])
        count = count + 1
    return column_list
gvnnz commented 8 months ago

Con il for è decisamente più leggibile. Però non funziona con tutte le matrici. Ho provato con

matrix = [[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14]]

e ritorna sempre e solo i primi tre valori.

Ace-Miky commented 8 months ago

@gvnnz Per farla funzionare basta togliere [0] dopo matrix Quindi facciamo così?


def get_matrix_column(matrix, n):
    count = 0
    column_list = []
    for element in matrix:
        column_list.append(matrix[count][n])
        count = count + 1
    return column_list
Ace-Miky commented 8 months ago

@gvnnz Bisogna anche aggiungere:


def get_matrix_column(matrix, n):
    if n < len(matrix[0]):
        count = 0
        column_list = []
        for element in matrix:
            column_list.append(matrix[count][n])
            count = count + 1
        return column_list
    else:
        return False
Ace-Miky commented 8 months ago

if n < len(matrix[0]) si deve aggiungere anche in get_matrix_row(matrix, n)

gvnnz commented 8 months ago

@Ace-Miky una funzione è meglio se ritorna sempre lo stesso tipo. Con la tua ultima modifica può ritornare o una lista o un booleano. Anche se puoi farlo in Python, è sconsigliato perché poi è un casino usare quelle funzioni. Quindi l'ideale qui è non fare il controllo, mettere un assert all'inizio e ritornare sempre una lista.

EDIT: avevo scritto cazzate, ho corretto il messaggio.

Ace-Miky commented 8 months ago

Ok Ho capito, comunque ne riparliamo la prossima volta che ti chiedo un paio di cose