DOMANDA [Python] Gestione di Matrici

Cotrox

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

Cotrox

Nuovo Utente
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")
Post automaticamente unito:

 
Ultima modifica:

1nd33d

Utente Attivo
652
279
Hardware Utente
CPU
Intel i5 3570K @ 4,5Ghz
Dissipatore
Scythe Mugen 2
Scheda Madre
Gigabyte Z77X-UD3H
Hard Disk
Samsung 840 PRO 256GB + Sandisk Ultra 250GB + Sandisk Plus 960GB
RAM
2x8GB Crucial Ballistix Tactical @2000Mhz CL9
Scheda Video
XFX RX480 GTR Black Edition
Scheda Audio
Auzentech X-Fi Forte
Monitor
AOC i2369VW
Alimentatore
Seasonic P660
Case
eh?
Periferiche
Razer Naga HEX v2
Sistema Operativo
Windows 10 64bit - Linux Mint 18
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).
 

Entra

oppure Accedi utilizzando