Funzioni - soluzioni

Introduzione

Una funzione prende dei parametri e li usa per produrre o riportare qualche risultato.

ATTENZIONE

Questi esercizi sulle funzioni sono integrativi a quelli già indicati nella pagina riferimenti, in particolare vedere quelli qui sotto.

Riferimenti

Che fare

  • scompatta lo zip in una cartella, dovresti ottenere qualcosa del genere:

functions
    functions.ipynb
    functions-sol.ipynb
    jupman.py

ATTENZIONE: Per essere visualizzato correttamente, il file del notebook DEVE essere nella cartella szippata.

  • apri il Jupyter Notebook da quella cartella. Due cose dovrebbero aprirsi, prima una console e poi un browser. Il browser dovrebbe mostrare una lista di file: naviga la lista e apri il notebook functions.ipynb

  • Prosegui leggendo il file degli esercizi, ogni tanto al suo interno troverai delle scritte ESERCIZIO, che ti chiederanno di scrivere dei comandi Python nelle celle successive. Gli esercizi sono graduati per difficoltà, da una stellina ✪ a quattro ✪✪✪✪

Scorciatoie da tastiera:

  • Per eseguire il codice Python dentro una cella di Jupyter, premi Control+Invio

  • Per eseguire il codice Python dentro una cella di Jupyter E selezionare la cella seguente, premi Shift+Invio

  • Per eseguire il codice Python dentro una cella di Jupyter E creare una nuova cella subito dopo, premi Alt+Invio

  • Se per caso il Notebook sembra inchiodato, prova a selezionare Kernel -> Restart

DOMANDE: Per ciascuna delle espressioni seguenti, prova a indovinare che risultato produce (o se da errore)

  1. def f():
    print('car')
    f()
    
  2. def f():
        print('car')
    f()
    
  3. def f():
    return 3
    f()
    
  4. def f():
        return 3
    f()
    
  5. def f()
        return 3
    f()
    
  6. def f():
        return 3
    f()f()
    
  7. def f():
        return 3
    f()*f()
    
  8. def f():
        pass
    
  9. def f(x):
        return x
    f()
    
  10. def f(x):
        return x
    f(5)
    
  11. def f():
        print('fire')
    x = f()
    print(x)
    
  12. def f():
        return(print('fire'))
    print(f())
    
  13. def f(x):
        return 'x'
    print(f(5))
    
  14. def f(x):
        return 'x'
    print(f(5))
    
  15. def etc():
        print('etc...')
        return etc()
    etc()
    
  16. def per(la):
        la.append('è')
    per(['c','h'])
    print(la)
    
  17. def zeb(la):
        la.append('d')
    lista = ['a','b','c']
    zeb(lista)
    print(lista)
    
  18. def gu():
        print('GU')
        ru()
    def ru():
        print('RU')
        gu()
    gu()
    

somma

✪ Scrivere una funzione somma che dati due numeri x e y RITORNA la loro somma

Mostra soluzione
[1]:
# scrivi qui


[2]:
s = somma(3,6)
print(s)
9
[3]:
s = somma(-1,3)
print(s)
2

comparap

✪ Scrivere una funzione comparap che dati due numeri x e y, STAMPA x è maggiore di y, x è minore di y o x è uguale a y

NOTA: nella stampa, mettere i numeri veri. Per es comparap(10,5) dovrebbe stampare:

10 è maggiore di 5

SUGGERIMENTO: per stampare numeri e testo, usare le virgole nella print:

print(x, " è maggiore di ")
Mostra soluzione
[4]:
# scrivi qui


[5]:
comparap(10,5)
10  è maggiore di  5
[6]:
comparap(3,8)
3  è minore di  8
[7]:
comparap(3,3)
3  è uguale a  3

comparar

✪ Scrivere una funzione comparar che dati due numeri x e y, RITORNA la STRINGA '>' se x è maggiore di y, la STRINGA '<' se x è minore di y oppure la STRINGA '==' se x è uguale a y

Mostra soluzione
[8]:
# scrivi qui


[9]:
c = comparar(10,5)
print(c)
>
[10]:
c = comparar(3,7)
print(c)
<
[11]:
c = comparar(3,3)
print(c)
==

pari

✪ Scrivere una funzione pari che dato un numero x RITORNA True se il numero x in ingresso è pari, altrimenti ritorna False

SUGGERIMENTO: un numero è pari quando il resto della divisione per due è zero. Per ottenere il resto della divisione, scrivere x % 2.

[12]:
# Esempio:
2 % 2
[12]:
0
[13]:
3 % 2
[13]:
1
[14]:
4 % 2
[14]:
0
[15]:
5 % 2
[15]:
1
Mostra soluzione
[16]:
# scrivi qui


[17]:
p = pari(2)
print(p)
True
[18]:
p = pari(3)
print(p)
False
[19]:
p = pari(4)
print(p)
True
[20]:
p = pari(5)
print(p)
False
[21]:
p = pari(0)
print(p)
True

mag

✪ Scrivere una funzione che dati due numeri x e y RITORNA il numero maggiore.

Se sono uguali, RITORNA un numero qualsiasi.

Mostra soluzione
[22]:
# scrivi qui


[23]:
m = mag(3,5)
print(m)
5
[24]:
m = mag(6,2)
print(m)
6
[25]:
m = mag(4,4)
print(m)
4
[26]:
m = mag(-5,2)
print(m)
2
[27]:
m = mag(-5, -3)
print(m)
-3

is_vocale

✪ Scrivi una funzione is_vocale a cui viene passato un carattere car come parametro, e STAMPA 'sì' se il carattere è una vocale, altrimenti STAMPA 'no' (usando le print).

>>> is_vocale("a")
'si'

>>> is_vocale("c")
'no'
Mostra soluzione
[28]:
# scrivi qui


volume_sfera

✪ Il volume di una sfera di raggio r è \(4/3 π r^3\)

Scrivere una funzione volume_sfera(raggio)  che dato unraggio` di una sfera, STAMPA il volume

NB: assumi pi_greco = 3.14

>>> volume_sfera(4)
267.94666666666666
Mostra soluzione
[1]:
# scrivi qui


ciri

✪ Scrivi una funzione ciri(nome) che prende come parametro la stringa nome e RITORNA True se è uguale al nome ‘Cirillo’

>>> r = ciri("Cirillo")
>>> r
True

>>> r = ciri("Cirillo")
>>> r
False
Mostra soluzione
[30]:
# scrivi qui


age

✪ Scrivi una funzione age che prende come parametro anno di nascita e RITORNA l’eta’ della persona

**Supponi che l’anno corrente sia noto, quindi per rappresentarlo nel corpo della funzione usa una costante come ** 2019

>>> a = age(2003)
>>> print(a)
16
Mostra soluzione
[31]:
# scrivi qui


Verifica comprensione

ATTENZIONE

Gli esercizi che segueno contengono dei test con gli assert. Per capire come svolgerli, leggi prima Gestione errori e testing

mag_tre

✪✪ Scrivi una funzione mag_tre(a,b,c) che prende stavolta tre numeri come parametro e RESTITUISCE il più grande tra loro

Esempi:

>>> mag_tre(1,2,4)
4

>>> mag_tre(5,7,3)
7

>>> mag_tre(4,4,4)
4
Mostra soluzione
[32]:
# scrivi qui


prezzo_finale

✪✪ Il prezzo di copertina di un libro è € 24,95, ma una libreria ottiene il 40% di sconto. I costi di spedizione sono € 3 per la prima copia e 75 centesimi per ogni copia aggiuntiva. Quanto costano n copie? Scrivi una funzione prezzo_finale(n) che RITORNA il prezzo.

ATTENZIONE 1: Python per i numeri vuole il punto, NON la virgola !

ATTENZIONE 2: Se ordinassi zero libri, quanto dovrei pagare ?

SUGGERIMENTO: il 40% di 24,95 si può calcolare moltiplicando il prezzo per 0.40

>>> p = prezzo_finale(10)
>>> print(p)

159.45

>>> p = prezzo_finale(0)
>>> print(p)

0
Mostra soluzione
[33]:
def prezzo_finale(n):
    raise Exception('TODO IMPLEMENT ME !')

assert prezzo_finale(10) == 159.45
assert prezzo_finale(0) == 0

ora_arrivo

✪✪✪ Correndo a ritmo blando ci mettete 8 minuti e 15 secondi al miglio, e correndo a ritmo moderato ci impiegate 7 minuti e 12 secondi al miglio.

Scrivi una funzione ora_arrivo(n,m) che supponendo una partenza alle ore 6 e 52 minuti, date n miglia percorse con ritmo blando e m con ritmo moderato, STAMPA l’ora di arrivo.

  • SUGGERIMENTO 1: per calcare una divisione intera, usate //

  • SUGGERIMENTO 2: per calcolare il resto di una divisione intera, usate l’operatore modulo %

>>> ora_arrivo(2,2)
7:22
Mostra soluzione
[34]:
def ora_arrivo(n,m):
    raise Exception('TODO IMPLEMENT ME !')

assert ora_arrivo(0,0) == '6:52'
assert ora_arrivo(2,2) == '7:22'
assert ora_arrivo(2,5) == '7:44'
assert ora_arrivo(8,5) == '9:34'
[ ]: