Dal corso: Corso essenziale su Python

Soluzione: Fattoriali - Tutorial Python

Dal corso: Corso essenziale su Python

Soluzione: Fattoriali

- [Istruttore] Spero che ti sia divertito a capire quelle funzioni fattoriali. Bentornato. Come hai fatto? Ti mostrerò la mia soluzione e, se hai guardato il file dei suggerimenti, questa soluzione probabilmente non dovrebbe sorprenderti troppo. La prima cosa che vogliamo fare è assicurarci di essere in grado di prendere il fattoriale del nostro input, quindi se il nostro input non è un numero intero, non restituiremo nessuno. Quindi questo si prende cura di float come 1.2 così come la stringa "spam, spam, spam, spam, spam, spam" che potresti aver notato essere un caso di test. Naturalmente, il due negativo è ancora un numero intero valido, quindi dobbiamo creare un caso speciale anche per questo, quindi controlliamo se il numero di input è minore di zero e poi restituiamo nessuno, perché non è possibile avere il fattoriale di un intero negativo. Ora vogliamo metterci al lavoro con il calcolo del fattoriale. Per fare ciò, farò due variabili, fact, abbreviazione di fattoriale. Questa è la cosa che alla fine restituiamo, e poi contrastiamo per tenere traccia di quanti cicli dobbiamo fare. Quindi, mentre il contatore è inferiore al num di input, che è fondamentalmente il numero di iterazioni, il nostro fattoriale è uguale al fattoriale, il fattoriale esistente, moltiplicato per il contatore, e poi ad ogni passaggio nel ciclo, incrementiamo o aggiungiamo uno al nostro contatore. Quindi, al primo passaggio, moltiplicherai per uno, uno per uno. Al secondo passaggio, moltiplicherai per due, al terzo passaggio, per tre, eccetera, fino al numero che è stato passato. Quindi, se passi in cinque, finirai per tornare una volta due volte tre volte quattro volte cinque, che è esattamente quello che vogliamo. E ricordate, abbiamo un caso speciale in cui il numero di input è uguale a zero, quindi i matematici hanno deciso che il fattoriale di zero è uno. Non l'ho deciso io, erano i matematici, ma noi come programmatori di computer dobbiamo seguire le regole dei matematici, quindi funziona quando il numero di input è zero? Se num è zero, allora iniziamo il numero dei fatti da uno. Il ciclo while non viene mai inserito perché il numero di input zero è già maggiore del contatore, e quindi finiamo per restituirne uno, che è corretto, quindi fantastico. Ora, c'è anche un modo più breve per scrivere questa funzione, ed è attraverso la ricorsione, dove una funzione chiama se stessa. Quindi voglio solo mostrarvi la soluzione molto velocemente. In realtà manterrò gli stessi controlli qui, e aggiungerò un ulteriore caso. Se num è uguale a zero, restituisce uno. Ok, infine, vogliamo restituire num volte num fattoriale meno uno, e se testiamo questo, funziona anche questo. Fantastico. Allora, cosa sta succedendo? Bene, diciamo che chiamiamo questa funzione fattoriale con il numero tre, e scriverò solo un commento qui. Fattoriale tre è il modo in cui lo chiameremo, e a cosa equivale, questo non è codice Python, è solo una sorta di scorciatoia. Quello che farà è dire, ok, fantastico, tutti questi controlli passano per il numero tre. Non è uguale a zero, quindi scendiamo qui e restituiamo tre volte fattoriale di tre meno uno, che è due, quindi finiamo per restituire tre volte fattoriale due. Beh, cos'è il fattore due? Quindi viene chiamato di nuovo con num che è due, passa tutto questo, e si scopre che il fattoriale due è uguale a due volte il fattoriale uno. Va bene, allora cos'è il fattoriale uno? Lo chiamiamo di nuovo. Viene chiamato qui. L'uno fattoriale è uguale a uno volte lo zero fattoriale, uno volte lo zero fattoriale. Beh, cos'è lo zero fattoriale? Viene chiamato di nuovo. Se il numero è zero, restituiamo uno, quindi lo zero fattoriale è uno, e si scopre che il fattoriale tre è tre volte due volte uno per uno, che è sei, quindi la nostra chiamata di funzione originale, fattoriale tre, è uguale a sei e, infine, restituisce sei. Ora, la ricorsione potrebbe sembrare una magia all'inizio, ma non lasciarti intimidire. È solo una specie di loop fantasioso. Ci vuole un po' di tempo per prenderci la mano, ma è anche un'abilità molto utile da avere nel tuo repertorio di programmazione.

Contenuti