Viene richiesto di scrivere funzioni per risolvere vari problemi, e viene fornito anche uno strumento che mette alla prova il comportamento delle funzioni che avete scritto.
Create una cartella, nella quale saranno creati sia i file contenenti le funzioni che avete scritto (una per ciascun file), sia i file di test (forniti dal docente).
I nomi di questi file devono essere esattamente i seguenti:
labEserc9_1.py
, labEserc9_2.py
, labEserc9_3.py
, labEserc9_4.py
, labEserc9_5.py
, labEserc9_6.py
, labEserc9_7.py
, per i sette files contenenti le funzioni scritte da voi,test_lab9_1.py
, test_lab9_2.py
, test_lab9_3.py
, test_lab9_4.py
, test_lab9_5.py
, test_lab9_6.py
, test_lab9_7.py
per i file di test (forniti dal docente)Per ciascuno dei problemi elencati nel seguito dovrete scrivere un file contenente la soluzione richiesta, in cui il nome della funzione deve essere esattamente quello indicato nel testo seguente.
Una volta salvato il file nella cartella, e salvato anche il corrispondente file di test fornito dal docente, dovete eseguire il comando
python3 test_lab9_X.pydove
X
è il numero da 1 a 7 corrispondente all'esercizio che volete verificare.
Il risultato del test è una schermata (o più schermate) nella quale si mostra:
Per ogni funzione scritta vengono eseguite chiamate con diversi valori dei parametri. L'esito dei test viene riportato con il carattere
Scrivere una funzione medie_mobili(seq, k)
che:
seq
e un numero naturale k
;TypeError
se il primo parametro ricevuto non è una lista, o se gli elementi della lista non sono numeri;ValueError
se la sequenza ha lunghezza 0;ValueError
se il valore del secondo parametro
è minore o uguale a 0 oppure è maggiore della lunghezza del primo parametro;len(seq)-k+1
medie mobili semplici di ordine k
. Una media mobile semplice di ordine k
è la media aritmetica di k
elementi consecutivi nella sequenza, quindi se la sequenza ha lunghezza n
si possono calcolare n-k+1
medie mobili: dalla porzione di sequenza [0:k] alla porzione di sequenza [n-k:n] (estremo iniziale incluso, estremo finale escluso). Notare che il numero di medie mobili calcolate dipende dalla lunghezza della sequenza e dal valore di k
Ad esempio, se la funzione medie_mobili(seq, k)
viene chiamata con parametri
seq = [2, 4, 3, 6, 8, 9, 10, 12]
e k = 4
deve essere restituita la lista [3.75, 5.25, 6.5, 8.25, 9.75]
, che rappresenta le medie delle 5 sequenze [2, 4, 3, 6]
, [4, 3, 6, 8]
, [3, 6, 8, 9]
, [6, 8, 9, 10]
, [8, 9, 10, 12]
.
Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab9_1.py
La soluzione deve essere prodotta in un file di nome labEserc9_1.py
Scrivere una funzione pos_max_media_mobile(seq, k)
che, utilizzando anche la funzione definita nell'esercizio precedente:
seq
e un numero naturale k
;k
della sequenza seq
(vedi definizione nell'esercizio precedente).Ad esempio, se viene chiamata con parametri
[2, 4, 3, 6, 8, 9, 10, 12], 4
deve essere restituito il valore 4, poiché la sequenza delle medie mobili è [3.75, 5.25, 6.5, 8.25, 9.75]
e il massimo compare in posizione 4.
Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab9_2.py
La soluzione deve essere prodotta in un file di nome labEserc9_2.py
Scrivere una funzione verifica_mat_rett(m)
che:
m
;TypeError
se il parametro ricevuto non è una lista di lunghezza almeno 1, o se gli elementi della lista non sono liste di lunghezza almeno 1;True
se tutti gli elementi di m
hanno la stessa lunghezza, False
altrimenti.Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab9_3.py
La soluzione deve essere prodotta in un file di nome labEserc9_3.py
Scrivere una funzione crea_mat(nrighe, ncol, val)
che:
nrighe
e ncol
, più un terzo parametro opzionale val
che per default vale 0;TypeError
se i primi due parametri non sono numeri interi;ValueError
se i primi due parametri non sono strettamente maggiori di 0;nrighe
elementi, ciascuno dei quali è una lista di ncol
elementi. Ciascuno di tali elementi deve essere inizializzato con il valore val
. Ad esempio, se vengono passati come parametri i valori 2, 3, 7
deve essere restituita la lista
[ [7, 7, 7], [7, 7, 7] ]
.Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab9_4.py
La soluzione deve essere prodotta in un file di nome labEserc9_4.py
Scrivere una funzione trasposta(m)
che:
m
;TypeError
se la lista di liste non rappresenta una matrice rettangolare (vedi terzo esercizio);m
(per questo è utile prima creare la matrice chiamando la funzione definita nel quarto esercizio, per poi modificarne gli elementi in modo da avere la trasposta di m
.[[2, 3, 7], [5, 3, 1]]
deve essere restituita la lista
[[2, 5], [3, 3], [7, 1]]
Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab9_5.py
La soluzione deve essere prodotta in un file di nome labEserc9_5.py
Scrivere una funzione num_righe_crescenti(m)
che:
m
;TypeError
se il parametro ricevuto non è una lista, o se gli elementi della lista non sono liste;TypeError
se gli elementi della matrice non sono numeri;m
che sono strettamente crescenti.Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab9_6.py
La soluzione deve essere prodotta in un file di nome labEserc9_6.py
Un elemento m[i][j]
di una matrice m
si dice punto di sella se è strettamente maggiore di tutti gli altri elementi sulla riga i
ed è strettamente minore di tutti gli altri elementi sulla colonna j
. Notare che una matrice contiene al massimo un solo punto di sella.
Ad esempio, la matrice
9 4 16 10 4 2 5 7 6 2 8 12 13 9 1ha un punto di sella a riga 1 e colonna 2 (il valore 7) poiché 7 è il massimo della riga 1 ed è anche il minimo della colonna 2.
punto_di_sella(m)
che:
m
;TypeError
se il parametro ricevuto non è una lista, o se gli elementi della lista non sono liste;TypeError
se la lista di liste non rappresenta una matrice rettangolare (vedi terzo esercizio);(i, j)
del punto di sella, se esiste, e restituisce None
se m
non ha un punto di sella.Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab9_7py
La soluzione deve essere prodotta in un file di nome labEserc9_7.py