Modalità di svolgimento dell'esercitazione

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:

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_lab10_X.py
dove X è il numero 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


Funzioni su caratteri

Primo esercizio: sostituzione dei caratteri non alfabetici

Scrivere una funzione sostituisci_con_spazi(frase) che data una stringa di caratteri restituisce una stringa di caratteri. La stringa restituita contiene la stessa sequenza, ma ciascun carattere non alfabetico deve essere sostituito da uno spazio. Ad esempio, se il parametro è la stringa

"Buongiorno, vengo dall'Umbria."
deve essere restituita la stringa
"Buongiorno  vengo dall Umbria "

Notare la presenza di un elemento " " in corrispondenza dei caratteri virgola, apostrofo e punto.

Per verificare se un carattere (contenuto in una variabile p.es. di nome pippo) è una lettera si può usare il metodo pippo.isalpha(), che restituisce True oppure False.

La funzione deve sollevare una eccezione TypeError se il parametro ricevuto non è una stringa.

Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab10_1.py
La soluzione deve essere prodotta in un file di nome labEserc10_1.py

Secondo esercizio: conversione in minuscoli

Scrivere una funzione copia_minuscola(frase) che, che data una stringa di caratteri che contiene esclusivamente lettere maiuscole, minuscole e spazi, restituisce una stringa nella quale per ciascun carattere maiuscolo viene inserito il corrispondente minuscolo. Ad esempio, se il parametro è la stringa

"Buongiorno  vengo dall Umbria "
deve essere restituire la stringa
"buongiorno  vengo dall umbria "

Per verificare se un carattere (contenuto in una variabile p.es. di nome pippo) è una lettera maiuscola si possono utilizzare condizioni del tipo if pippo >= "A", confrontando naturalmente anche con "Z".

Per ottenere la versione minuscola di un carattere si può usare il metodo .lower(), che restituisce la versione minuscola di un carattere.

La funzione deve sollevare una eccezione TypeError se il parametro ricevuto non è una stringa.

Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab10_2.py
La soluzione deve essere prodotta in un file di nome labEserc10_2.py

Terzo esercizio: convertire una stringa in una lista di parole

Scrivere una funzione spezza_in_parole(frase) che data una stringa restituisce una lista formata da un elemento per ciascuna parola nella stringa. Ad esempio, se il parametro è la stringa

"buongiorno  vengo dall umbria "
deve essere restituita la lista
["buongiorno", "vengo", "dall", "umbria"]

Si può assumere che la stringa fornita come parametro sia composta esclusivamente da caratteri minuscoli e spazi.

Le stringhe possiedono un metodo .split(). Verificarne il funzionamento dall'interprete Python provando ad eseguire ad esempio le istruzioni
s = "pippo pluto topolino"
print(s.split()):

La funzione deve sollevare una eccezione TypeError se il parametro ricevuto non è una stringa.

Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab10_3.py
La soluzione deve essere prodotta in un file di nome labEserc10_3.py

Quarto esercizio: ordinare una lista di parole

Scrivere una funzione parole_ordinate(lista_parole) che data una lista di parole ne restituisce una copia ordinata. Ad esempio, se il parametro è la lista

["buongiorno", "vengo", "dall", "umbria", "e", "in", "umbria", "torno"]
essa deve essere restituita la lista
["buongiorno", "dall", "e", "in", "torno", "umbria", "umbria", "vengo"]
Per ordinare la lista si può utilizzare uno qualunque degli algoritmi di ordinamento visti a lezione, oppure il metodo .sort() delle liste. Se ad esempio, avendo una lista pippo, si chiama il metodo pippo.sort() verrà modificata la lista pippo, che risulterà ordinata. Nel nostro caso è invece richiesto di costruire un'altra lista ordinata, quindi è necessario costruirne prima una copia per non modificare l'originale, e poi ordinare la copia.

La funzione deve sollevare una eccezione TypeError se il parametro ricevuto non è una lista.

Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab10_4.py
La soluzione deve essere prodotta in un file di nome labEserc10_4.py

Quinto esercizio: costruire una lista eliminando i duplicati

Scrivere una funzione elimina_duplicati(lista) che data una lista ordinata di parole restituisce un'altra lista che contiene le stesse parole ma senza duplicati. Poiché la lista è ordinata, eventuali parole duplicate compaiono in posizioni consecutive. Ad esempio, se il parametro è la lista

["buongiorno", "dall", "e", "e", "in", "torno", "umbria", "umbria", "vengo"]
deve essere restituita la lista
["buongiorno", "dall", "e", "in", "torno", "umbria", "vengo"]

Poiché la lista è ordinata, eventuali parole duplicate compaiono sicuramente il posizioni adiacenti.

La funzione deve sollevare una eccezione TypeError se il parametro ricevuto non è una lista.

La funzione deve sollevare una eccezione ValueError se il parametro ricevuto non è una lista ordinata in senso non decrescente.

Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab10_5.py
La soluzione deve essere prodotta in un file di nome labEserc10_5.py

Sesto esercizio: utilizzare le funzioni definite nei punti precedenti

Per risolvere questo esercizio si chiamano tutte le funzioni definite nei punti precedenti.
Scrivere una funzione elenco_parole_presenti(frase) che data una stringa costruisce la lista delle parole presenti, senza duplicati, in ordine alfabetico, considerando uguali caratteri minuscoli e maiuscoli.

Ad esempio, se il parametro è la stringa
"Pippo, Pluto e Topolino incontrano Minnie. E lei li ignora, come se non li avesse visti!"
deve essere restituita la lista
["avesse", "come", "e", "ignora", "incontrano", "lei", "li", "minnie", "non", "pippo", "pluto", "se", "topolino", "visti"]

Il file di test da memorizzare nella propria cartella per questo esercizio è test_lab10_6.py
La soluzione deve essere prodotta in un file di nome labEserc10_6.py