[Python] Gestione di Matrici

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Cotrox

Utente Attivo
Messaggi
238
Reazioni
8
Punteggio
48
Salve ragazzi, sto cercando di esercitarmi e vorrei provare a creare un programmino per aggiungere/rimuovere prenotazioni ma ho un problema:

Supponiamo di avere una matrice:

MATRICE = [ [ a, b, c, d], [e, f, g, h] ]

se io volessi aggiungere una nuova riga contenente altri quattro elementi come dovrei fare?
per aggiungere elementi a una lista usavo il .append ma non posso farlo essendo una tupla...
 
??
Quella e' una lista, non una tupla (che viene definita con le parentesi rotonde)
 
Avevo commesso uno stupido errore perchè programmavo distrattamente... non avevo chiuso l'elenco di liste tra [ ]

Comunque adesso sto provando ad ampliare il tutto ma ricevo questo problema qui: TypeError: list indices must be integers or slices, not list

il codice attualmente è il seguente:

Codice:
""" Il programma chiede il giorno attuale e la lista di informazioni relativa alla nuova prenotazione.
    Al termine ritorna il numero delle attuali prenotazioni attive ed incassa nell'archivio quelle scadute. """

def verifica_utenti_in_uscita(day):
    for i in gestione_prenotazioni:
        if gestione_prenotazioni[i][2] == day:
            archivio.append(gestione_prenotazioni[i])
            gestione_prenotazioni.remove(estione_prenotazioni[i])
            

def aggiungi_prenotazione(a, b, c, d):
    numero_stanza = a
    da_giorno = b
    a_giorno = c
    a_nome_di = d

    nuovo_utente = [a, b, c, d]
    
    gestione_prenotazioni.append(nuovo_utente)
    
    return gestione_prenotazioni

def calendario(day):
    while day <= 31:
        return day
    else:
        day = 0

    verifica_utenti_in_uscita(day)

gestione_prenotazioni = [[ 0, 3, 4, 'Piero Verdi'],
                         [ 1, 4, 5, 'Antonio Rossi'],
                         [ 2, 4, 5, 'Andrea Giallo']]

calendario(int(input('Digita un giorno da 0 a 31 --> ',)))

aggiungi_prenotazione(int(input('Numero Stanza:',)), int(input('da giorno:',)), int(input('a giorno:',)), str
                      (input('a nome di:',)))

archivio = []

n = len(gestione_prenotazioni)

print('Attualmente sono disponibili', n, 'prenotazioni.')

print("\nPer accedere all'archivio e visualizzare le prenotazioni passate utilizza: archivio")

print("\nPer visualizzare la lista delle attuali prenotazioni digita: gestione_prenotazioni")
--- i due messaggi sono stati uniti ---
 
Ultima modifica:
Python:
for i in gestione_prenotazioni:
Stai iterando gli elementi della "matrice" e quindi ogni "i" è una lista, che non puoi usare per indicizzare la "matrice" stessa.
Dovresti piuttosto scrivere
Python:
for i in range(len(gestione_prenotazioni)):
oppure cambiare il codice interno e scrivere
Python:
for prenotazione in gestione_prenotazioni:
        if prenotazione[2] == day:
            archivio.append(prenotazione)
            gestione_prenotazioni.remove(prenotazione)
che mi sembra più chiaro.

Poi questa funzione:
Python:
def aggiungi_prenotazione(a, b, c, d):
    numero_stanza = a
    da_giorno = b
    a_giorno = c
    a_nome_di = d

    nuovo_utente = [a, b, c, d]
 
    gestione_prenotazioni.append(nuovo_utente)
 
    return gestione_prenotazioni
è inutilmente complicata, ti basta scrivere:
Python:
def aggiungi_prenotazione(a, b, c, d): 
    gestione_prenotazioni.append([a,b,c,d])
senza ritornare nulla, visto che l'oggetto "gestione_prenotazioni" che modifichi è definito nello scope superiore (e il valore di ritorno non lo usavi nemmeno prima mi pare).
 
Perfetto, poi ci ho ragionato un po' su e ci sono arrivato ed ho appena confrontato con il tuo commento, tutto più chiaro :P
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top