In questa lezione calcoleremo il fattoriale di un numero in Python utilizzando vari metodi.
Innanzitutto diamo la definizione.
In matematica il fattoriale di un numero naturale n, è il prodotto dei numeri interi positivi minori o uguali a tale numero e si indica con n!
Quindi ad esempio 5!=5*4*3*2*1=120
mentre per convenzione 0!=1
Il fattoriale in Python
Realizziamo adesso un programma per il calcolo del fattoriale in Python.
Prendiamo in input n e poniamo la variabile f uguale ad 1, cioè all’elemento neutro della moltiplicazione.
Dopo, con un ciclo for che ha l’indice i che varia da un range di 1 ad n+1, calcoliamo il fattoriale eseguendo questa operazione f = f * i.
Quindi se ad esempio n è uguale a 5 avremo questi passaggi:
f=1*1, f=1*2, f=2*3, f=6*4, f=24*5
In output stamperemo dunque 120.
Una possibile implementazione dell’algoritmo può essere dunque questa:
n=int(input('Inserire il numero: '))
f=1
for i in range(1,n+1):
f*=i
print(n)
Soluzione ricorsiva al fattoriale
Possiamo anche trovare una soluzione ricorsiva. Diamone innanzitutto la definizione.
Si definisce ricorsiva una funzione che invoca se stessa.
La tecnica ricorsiva consente di scrivere algoritmi eleganti, ma non sempre rappresenta la soluzione più efficiente. Ciò è dovuto al fatto che la ricorsione viene implementata con le funzioni e l’invocazione di una funzione ha chiaramente un costo rilevante.
Definiamo quindi una funzione ed all’interno controlliamo innanzitutto se n è uguale a 0, ritornando il valore 1. Altrimenti moltiplichiamo n per il fattoriale di n-1.
Proponiamo dunque la seconda soluzione al calcolo del fattoriale in Python che fa uso della ricorsione.
n = int(input('Inserire il numero: '))
def fattoriale(n):
if n = =0:
return 1
else:
return n*fattoriale(n-1)
print ('Il fattoriale è', fattoriale(n))
Lo slicing in Python permette di creare delle sotto – sequenze, quindi è un modo per ottenere più elementi contemporaneamente da una lista.
Abbiamo già utilizzato lo slicing nelle stringhe nel seguente tutorial: stringhe in python.
Lo slicing in Python – creare sottoliste
Facciamo subito un esempio per capire come funziona lo slicing.
anni = [2019,2018,2017,2016,2015,2014]
p = anni[2:] #parte dall'indice 2 fino alla fine della lista
q = anni[:2]
m = anni[2:4]
e = anni[3]
n = anni[-1]
print(p)
print(q)
print(m)
print(e)
print(n)
Esaminiamo l’esempio proposto.
Con anni[2:] si crea una sottolista che parte dall’indice 2 e va fino alla fine della lista. Se non si specifica il secondo elemento infatti si intende fino alla fine.
Invece con anni[:2] si indicano solo i primi due elementi della lista. Se non specifico il primo elemento si intende dall’inizio.
Migliora le tue capacità di programmazione Python seguendo i nostri corsi in diretta!
Dopo con anni[2:4] creiamo una sottolista che parte dall’indice 2 e arriva fino all’indice 4-1. Stamperà dunque solo 2 elementi.
Poi con anni[3] indichiamo solo l’elemento con indice 3 e cioè l’anno 2016.
Infine con anni[-1] si parte da destra e quindi si stampa solo l’anno 2014.
Attenzione se indichiamo ad esempio anni[6] si avrà il seguente errore IndexError: list index out of range, in quanto l’indice esce fuori dal range della lista.
Specificare un passo
Negli slice è possibile inoltre specificare un passo, ad esempio:
anni = [1,2,3,4,5,6,7,8,9,10]
p = anni[1:10:2]
print(p)
Si stamperanno gli elementi dall’indice 1, quindi dal numero 2, fino all’indice 9 a passi di 2. Si avrà cioè il seguente output [2, 4, 6, 8, 10].
Per ottenere un ordine inverso posso indicare semplicemente lo step di -1, come da esempio sotto:
anni = [1,2,3,4,5,6,7,8,9,10]
p = anni[::-1]
print(p)
Stamperà quindi [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]. Posso indicare anche lo step di -2 per stampare i numeri [10, 8, 6, 4, 2].
Commenti recenti