Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Liste ad indice progressivo

Auron (15880 points)
50 126 194
in Programmare in Python by (15.9k points)
recategorized by
Sempre io, ho notato che quelle che in Visual Basic si chiamavano Variabili Array, in Python dovrebbero chiamarsi "Liste", se non ho capito male...
Ora, mi chiedevo se fosse in fase di assegnazione di valore ad una lista, attribuirgli un indice progressivo... Mi spiego:
Assegnando un valore a b[1] dovrei "riempire" la riga relativa all'indice "1" della lista "b"...
Volevo sapere se fosse possibile assegnare un indice "k" progressivo, incrementato in un apposito ciclo mediante il comando k=k+1, alla lista "b", in modo da assegnare in automatico i vari valori che mi vengono restituiti dalle diverse operazioni alle k diverse righe della lista "b".
1.6k views
closed

2 Answers

Best answer
francesco.dev (33560 points)
21 51 129
by (33.6k points)
selected by

Ciao Auron!
Praticamente, se ho ben capito, quello che vorresti fare è trovare un modo per inserire progressivamente i valori nella lista. Se è così allora posso aiutarti!
Per poter inserire valori in una lista senza sapere la sua dimensione di partenza prima di tutto dovrai dichiarare tale lista come oggetto vuoto, ovvero dichiarandola semplicemente = [].
Poi ti basterà utilizzare il metodo append() presente nell'oggetto lista!
Tale metodo viene adoperato per aggiungere un nuovo elemento alla lista che hai definito.

Grazie a tali informazioni potrai creare in maniere semplice un ciclo che ad ogni "turno" andrà ad inserire un nuovo elemento nella lista.

Sperando che quello che ho detto ti sia di aiuto!

by
Una domanda, se ad ogni ciclo inserisce un nuovo elemento, se stampo o faccio il return della lunghezza della lista finale, perchè mi da come risultato 0?. Non dovrebbe darmi tutt'altro risultato?
split (8700 points)
21 59 79
by (8.7k points)
non sono sicuro di aver capito la domanda, ma comunque mi sembra un po' precoce, visto che non abbiamo fatto gli "array" ancora... ma questo è un mio parere e sicuramente non ti interessa!
se ho capito bene la domanda però credo che la risposta sia abbastanza semplice, dovrebbe bastare chiamare la lista con b[k] in un ciclo for, dove incrementi il k ad ogni passo. il ciclo dovrebbe chiamare la funzione che fa le tue operazioni ed assegnarle a b[k]
in c si incrementava direttamente nelle parentesi del for, in python non so, ma potresti icomunque concludere il ciclo con un k+=1 (python non dovrebbe supportare sintassi come k++ o k--)
Auron (15880 points)
50 126 194
by (15.9k points)
Sì, so che è un po' precoce, ma come ho fatto per Visual Basic, cerco sempre di esplorare un po' per conto mio, in modo da sperimentare fin da subito alcuni meccanismi... Con il precedente linguaggio mi sono trovato molto bene così, quindi ho intenzione di adottare la stessa condotta per Python... Per venire al dunque...

Ho definito una funzione prova(b), dopodichè ho assegnato il valore 0 a k.
Ho usato un ciclo while con b diverso da 0 che racchiude:
- il decremento progressivo di b
- l'incremento progressivo di k
- l'assegnazione dell'attuale valore di b alla lista c[k]

Ponendo b=5 e chiamando la funzione, mi viene restituito quest'errore
           
                             'int' object does not support item assignment

Motivo?
(Stavo facendo pratica sul ciclo While, per questo non ho utilizzato il For, quello ancora devo vederlo anche se immagino sia simile a quello di VB)
split (8700 points)
21 59 79
by (8.7k points)
credo l'errore non c'entri con la tua prima domanda,  c[k] e k incrementato dovrebbe essere il modo giusto di riempire la lista, l'errore sembra qualcosa come un errore di "tipo" di variabile, senza codice è difficile dire da cosa dipenda...
passi la lista alla funzione? se sì, come gliela passi?
Auron (15880 points)
50 126 194
by (15.9k points)
Non c'è nulla di più di quanto ho scritto nel precedente commento, convertito in codice...
La lista c[k] compare per la prima volta all'interno della funzione, nascendo nel momento immediatamente successivo a quello in cui "b" decrementa per la prima volta... In particolare, il comando che uso è c[k]=b.
split (8700 points)
21 59 79
by (8.7k points)
prova a dichiararla esplicitamente prima la lista, cioè tipo c=[x,y,z], ho fatto un programma uguale al tuo che stampa a ogni passo e ha funzionato, ma solo se dichiaro la lista esplicitamente prima, e poi la faccio cambiare nel ciclo. tu come hai "dichiarato" la lista?
Auron (15880 points)
50 126 194
by (15.9k points)
Con c=[], ho dichiarato una lista vuota con l'unico scopo di rendere "c" una lista, in quanto non posso sapere prima di quanti elementi la lista deve essere composta, visto che il numero varia in base al valore di "b".
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
ma dai! ... non sono ancora arrivato alla seconda lezione ... :D
Auron (15880 points)
50 126 194
by (15.9k points)
Chiedo scusa Prof, ma la programmazione è una specie di malattia per me :D
Ho studiato in un Istituto Tecnico Commerciale per Programmatori e dopo il diploma mi sono laureato in Economia... Sono 4 anni che non programmo e sono in astinenza :P
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
... allora siamo tutti drogati ... :)