In questi esercizi faremo esperimenti sulle liste e, nel contempo, sul collaudo delle funzioni. Per poter svolgere questi esercizi, dovete scrivere programmi e test come file Python, non potete utilizzare i notebook.

Esercizio 1

Scrivere una funzione replace_value(l, old, new) che restituisce una nuova lista simile ad l, in cui tutti i valori old sono stati rimpiazzati col valore new. Non dovete modificare direttamente la lista l. Ad esempio, se l è la lista [1, None, 2, None, 5],   la chiamata a replace_value(l, None, 99) restituirà la lista [1, 99, 2, 99, 5].

Scrivere un test per verificare il corretto funzionamento di replace_value (inventatevi voi due o tre casi da controllare).

Esercizio 2

Modificare l'implementazione di replace_value in modo da restituire (sotto forma di tupla) due valori: la lista ottenuta dal rimpiazzamento, come prima, e anche il numero di elementi rimpiazzati. Ad esempio, se l è la lista [1, None, 2, None, 5],   la chiamata a replace_value(l, None, 99) restituirà la tupla ([1, 99, 2, 99, 5], 2).

 Scrivere un test per verificare il corretto funzionamento della funzione (usate gli stessi casi che avete progettato per l'Esercizio 1).

Esercizio 3

Scrivere la funzione replace_value_inplace(l, old, new) che è simile a replace_value(l, old, new), ma invece di restituire una nuova lista modifica sul posto la lista l. Ad esempio, se l è la lista [1, None, 2, None, 5],   dopo la chiamata a replace_value_inplace(l, None, 99) la list l varrà [1, 99, 2, 99, 5].

Scrivere un test per verificare il corretto funzionamento della funzione (usate gli stessi casi che avete progettato per l'Esercizio 1). Per suggerimenti su come effettuare il collaudo di funzioni che modificano le liste sul posto, guardare la sezione finale della lezione sul collaudo di funzioni.

Esercizio 4

Scrivere una funzione somma_liste_inplace che riceve come parametri due liste di numeri, che potete assumere della stessa lunghezza.  La funzione deve sommare i valori della seconda lista alla prima, da modificare sul posto, senza restituire alcunché. Ad esempio, se l è la lista [1, 2, 3], dopo aver chiamato somma_liste_inplace(l, [10, 20, 30]) la variabile l conterrà la lista [11, 22, 33].

Scrivere un test per verificare il corretto funzionamento della funzione.

Esercizio 5

Modificare la soluzione dell'esercizio precedente in modo che funzioni anche se le due liste hanno lunghezza differente. In questo caso, gli elementi mancanti della lista più piccola vanno considerati come fossero zero. Ad esempio, se l è la lista [1, 2, 3], dopo aver chiamato somma_liste_inplace(l, [10, 20, 30, 40]) la variabile l conterrà la lista [11, 22, 33, 40].

Scrivere un test per verificare il corretto funzionamento della funzione.

Osservazione. Notare che in generale, a meno che non sia scritto in maniera esplicita, una funzione non dovrebbe mai modificare i propri parametri. Pertanto, nel caso in questione, è chiaramente corretto modificare il primo parametro (lo chiede l'esercizio!!) ma modificare il secondo parametro è da considerare un errore!

Esercizio 6

Scrivere una funzione trova_tabella(t, v) che restituisce la posizione del valore v nella tabella t sotto forma di una tuple (num_riga, num_colonna), o restituisce None se v non compare in t.  Ad esempio, se 

t = [
[ 5, 0, 9 ],
[ 4, 1, 3 ],
[ 1, 2, 4 ]
]

allora trova_tabella(t, 1) restituirà o la tupla (1,1) o la tupla (2,0).

Esercizio 7

Scrivere una funzione traccia(t) che restituisce la traccia della matrice t, ovvero la somma degli elementi della diagonale principale. Si può supporre che la matrice sia quadrato, ovvero che il  numero di righe sia uguale al numero di colonne. Ad esempio, se 

t = [
[ 5, 0, 9 ],
[ 4, 1, 3 ],
[ 1, 2, 4 ]
]

allora traccia(t) restituirà il valore 10, ovvero la somma degli elementi 5, 1 e 4 della diagonale.

Esercizio 8

Scrivete un funzione stampa_tabella(t) che stampa su schermo il contenuto della tabella t su varie righe, come una vera  tabella. Ad esempio, se 

t = [
[ 5, 0, 9 ],
[ 4, 1, 3 ],
[ 1, 2, 4 ]
]

mentre il comando print(t) stampa semplicemente [[5, 0, 9], [4, 1, 3], [1, 2, 4]], la chiamata a stampa_tabella(t) stamperà qualcosa di simile:

5  0  9
4 1 3
1 2 4

Esercizio 9

Scrivere la funzione tabella_2_stringa(t) che opera come stampa_tabella(t) dell'Esercizio 8, ma che invece di stampare sullo schermo, restituisce una stringa contenente l'output normalmente generato da stampa_tabella(t). Pertanto,  print(tabella_2_stringa(t), end="") deve generare lo stesso output di  stampa_tabella(t).

Esercizio 10

Scrivere una diversa implementazione della funzione di cui all'Esercizio 1, scritta usando unicamente la list comprehension (vuol dire che non devono esserci cicli for o while, con l'esclusione del for dentro la list comprehension).

Suggerimento. Sarà anche necessario utilizzare l'espressione condizionale (vedi lezione).

Ultime modifiche: lunedì, 1 dicembre 2025, 17:19