Lezione laboratorio del 13/11/2023 (funzioni)
Il debugger
Vedere la videolezione sul debugger.
Esercizi
A partire dalla lezione di laboratorio di oggi spesso i testi degli esercizi chiederanno di scrivere una funzione e non una programma. Nonostante ciò, per poter provare che la funzione che avete scritto faccia il suo dovere, dovete ovviamente scrivere anche un programma principale, per quanto minimale, che richiami la funzione. Talvolta questi programmi si chiamano driver, ma attenzione perché il termine driver si usa anche per indicare quella parte dei sistemi operativa che si occupa di gestire una periferica
Esercizio 0
Il programma triangolo_bugged.py dovrebbe visualizzare triangolo rettangolo formato di asterischi, con la lunghezza dei cateti scelta dall'utente. Ad esempio, se l'input al programma è 4, l'output dovrebbe essere:
*
**
***
****
Purtroppo non funziona. Provate a correggere il programma eseguendolo passo passo con il debugger.
Esercizio 1
Scrivere la funzione area_trapezio(b1, b2, h) che calcola e restituisce l'area di un trapezio con basi b1 e b2 ed altezza h.
Esercizio 2
Scrivere la funzione somma_numeri(a, b) che restituisce la somma di tutti i numeri da a fino a b (estremi inclusi). Si può assumere che la funzione venga chiamata con a ≤ b.
Esercizio 3
Scrivere la funziona somma_dadi(n, k) che lancia virtualmente n dadi a k facce, somma i risultati ottenuti, e restituisce il risultato. Per "lanciare un dado a k facce" ovviamente non si intende veramente di lanciare un dado, ma generare un numero casuale tra 1 e k.
Esercizio 4
Scrivere la funzione input_between(prompt, a, b). La funzione visualizza la stringa prompt e prende in input da tastiera un numero intero. Se l'input è compreso tra a e b, estremi inclusi, la funzione termina restituendo questo valore, altrimenti visualizza un messaggio di errore e richiede di nuovo di inserire il dato. La funzione termina solo quando l'utente inserisce un numero compreso tra a e b. Consideriamo ad esempio il programma:
x = input_between("Immetti un numero: ", 1, 10)print("Hai inserito il numero", x)
Questo è un esempio di interazione con il programma (in grassetto quello che viene scritto dall'utente):
Immetti un numero: 22
Errore nell'inserimento
Immetti un numero: -5
Errore nell'inserimento
Immetti un numero: 7
Hai inserito il numero 7
Esercizio 5
Scrivere la funzione negative(img) che prende in input una immagine (un oggetto di tipo GraphicsImage) e resituisce una nuova immagine, ma in negativo. Lo pseudo-codice della funzione è il seguente:
- creare una nuova immagine vuota delle stesse dimensioni di quella originale (si può usare la funzione GraphicsImage(larghezza, altezza) per generare una immagine vuota delle dimensioni prefissate);
- per tutti i pixel che compongono l'immagine:
- acquisire i valori delle componenti red, green e blue dall'immagine originale
- settare il pixel corrispondente nella nuova immagine ai valori 255-red, 255-green, 255-blue
- restituire la nuova immagine.
Come immagine di prova potete usare queen-mary.gif.