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.

Variabili che non si resettano

s
stefan9 (400 points)
3 7 11
in Programmare in Python by (400 points)
closed by

Buona sera

Stavo esercitandomi con l'esame del 15 febbraio e in particolare con il primo esercizio.

Ho riscontrato questo problema.

Quando faccio partire il grade, il primo test mi da l'Ok mentre il secondo test sempre del primo esercizio mi da un risultato non corretto. E come risultato mi da , in pratica, la somma dei due dizionari. Ovvero come se il Dizionario non fosse stato cancellato/resettato all'inizio della test. Ho ovviato al problema con un if , ma mi chiedevo perchè non venisse resettato il dizionario all'inizio del Test.

Il codice ovviamente è ricorsivo, nella definizione della funzione , originalmente era  def es1(dir, estensioni), io ho apportato questa modifica def es1(dir, estensioni,dic={},h = 0), e credo che il problema sia questo.

In caso posso postare il Codice dell'esercizio ?

Grazie in anticipo per la pazienza

434 views
closed with the note: scoperto-l-arcano

1 Answer

andrea.sterbini (207940 points)
756 1270 2377
by (208k points)
edited by
Ho trovato il motivo.

Python calcola i valori di default al momento in cui la funzione viene definita e non al momento in cui viene usata.

Questo non crea problemi quando i valori di default sono IMMUTABILI (numeri, stringhe, tuple).

Quando invece sono MUTABILI (liste, dizionari, oggetti) è come se aveste definito una variabile globale, che non si resetta come invece vi aspettereste.