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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Accedere a variabile globale da funzione senza usare global

G
GianfrancoLeone (410 points)
4 11 17
in Es3 by (410 points)
closed by
Nell' es3 deve essere modificata la lista passata alla funzione come parametro; la funzione ha 2 parametri di input:la lista e il testo; ritorna una tupla e deve modifcare la lista iniziale lasciando solo le parole non utilizzate.

Come posso modificare una variabile globale in una funzione se questa variabile è passata come parametro e non posso utilizzare global?

Il mio codice nella funzione calcola correttamente la lista delle parole non utilizzate, ma rimane come variabile locale e la variabile globale non è cambiata.

Per essere più chiari: la funzione riceve i parametri lista e testo, e ritorna la tupla. Il mio codice ritorna la tupla correttamente, e aggiorna la lista come variabile locale; cosa devo fare per aggiornare la variabile globale passata come parametro?
522 views
closed with the note: answered

4 Answers

Xriuk (13590 points)
8 24 116
by (13.6k points)
Non utilizzare variabili globali. Per modificare la lista originale puoi usare i metodi (.remove() e simili) oppure lo slicing. Se crei una nuova lista non modifichi la lista originale.
Z
ZeroCrystal (4390 points)
8 14 46
by (4.4k points)
Non sono sicuro di aver capito al 100% la domanda ma proverò a risponderti: nel programma che hai scritto non è presente alcuna variabile globale, sono solo locali.

Nel momento in cui la lista ti viene passata come parametro della funzione es3 non ricevi una copia totalmente indipendente dalla lista originale, ma piuttosto un riferimento alla lista contenente le parole.

In altri termini tutte le modifiche che effettui sulla lista che ricevi per input vengono riflesse anche su quella utilizzata dal tester per valutare l'esercizio nonostante sia una variabile locale.
Entrambe le variabili fanno infatti riferimento allo stesso valore (per essere precisi allo stesso indirizzo di memoria), perciò ogni modifica viene "condivisa".

Il tuo programma deve semplicemente rimuovere le parole dalla lista che ricevi come parametro nella funzione es3, non hai alcun bisogno di tirare in ballo le variabili globali.
d
davide.scrimieri (2930 points)
5 16 39
by (2.9k points)
- Fai un clone dell'oggetto con il metodo .copy() -

- assegna questa copia ad una variabile locale

- lavora e modifica questa
Xriuk (13590 points)
8 24 116
by (13.6k points)
Così facendo non alteri la variabile originale, non era quello che chiedeva...
d
davide.scrimieri (2930 points)
5 16 39
by (2.9k points)
si, ho letto velocemente. Pardon.
andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
Non ci sono variabili globali