Uit de cursus: Training over basisprincipes van Python
Oplossing: Factorials - tutorial Python
Uit de cursus: Training over basisprincipes van Python
Oplossing: Factorials
- [Instructeur] Ik hoop dat je plezier hebt gehad met het uitzoeken van die faculteitsfuncties. Setup voortzetten. Hoe gaat het met je? Ik zal je mijn oplossing laten zien, en als je naar het hints-bestand hebt gekeken, zou deze oplossing waarschijnlijk niet als een al te grote verrassing moeten komen. Het eerste dat we willen doen, is ervoor zorgen dat we in staat zijn om de faculteit van onze invoer te nemen, dus als onze invoer geen geheel getal is, zullen we er geen teruggeven. Dit zorgt dus voor floats zoals 1.2 en de string "spam, spam, spam, spam, spam, spam" waarvan je misschien hebt gemerkt dat het een testcase was. Natuurlijk is min twee nog steeds een geldig geheel getal, dus daar moeten we ook een speciaal geval voor maken, dus we controleren of het invoergetal kleiner is dan nul en dan geven we er geen terug, omdat je de faculteit van een negatief geheel getal niet kunt hebben. Nu willen we aan de slag met het berekenen van de faculteit. Om dit te doen, ga ik twee variabelen maken, feit, een afkorting van faculteit. Dit is het ding dat we uiteindelijk teruggeven, en dan tegengaan om bij te houden hoeveel lussen we moeten doen. Dus hoewel de teller kleiner is dan het invoergetal, is dat in feite het aantal iteraties, onze faculteit is gelijk aan de faculteit, de bestaande faculteit, maal de teller, en dan verhogen we bij elke doorgang in de lus of voegen we er een toe aan onze teller. Dus bij de eerste doorgang ga je vermenigvuldigen met één, één keer één. Bij de tweede doorgang vermenigvuldig je met twee, bij de derde doorgang keer drie, enzovoort, tot het getal dat is doorgegeven. Dus als je er vijf haalt, kom je uiteindelijk één keer twee keer drie keer vier keer vijf terug, en dat is precies wat we willen. En vergeet niet dat we een speciaal geval hebben waarin het invoergetal gelijk is aan nul, dus wiskundigen besloten dat de faculteit van nul één is. Dat heb ik niet besloten, dat waren wiskundigen, maar wij als computerprogrammeurs moeten de regels van wiskundigen volgen, dus werkt dit als het invoergetal nul is? Als het getal nul is, dan beginnen we het feitgetal bij één. De while-lus wordt nooit ingevoerd omdat het invoergetal nul al groter is dan de teller, en dus geven we er uiteindelijk gewoon één terug, wat correct is, zo geweldig. Nu is er ook een kortere manier om deze functie te schrijven, en dat is door middel van recursie, waarbij een functie zichzelf aanroept. Dus ik wil je gewoon heel snel de oplossing laten zien. Ik ga hier eigenlijk dezelfde controles houden, en ik ga een extra geval toevoegen. Als het getal gelijk is aan nul, retourneert u er één. Oké, ten slotte willen we het aantal keren faculteitsgetal min één teruggeven, en als we dit testen, werkt dat ook. Ontzagwekkend. Dus wat is er aan de hand? Nou, laten we zeggen dat we deze functie faculteit noemen met het cijfer drie, en ik ga hier gewoon een opmerking schrijven. Faculteit drie is hoe we het gaan noemen, en waar dit gelijk aan is, dit is geen Python-code, dit is gewoon een soort steno. Wat dit gaat doen, is dat het gaat zeggen, oké, geweldig, al deze controles slagen voor de nummer drie. Het is niet gelijk aan nul, dus we gaan hier naar beneden en we keren drie keer faculteit terug van drie min één, wat twee is, dus we eindigen met drie keer faculteit twee. Nou, wat is faculteit twee? Dus het wordt opnieuw aangeroepen met num dat twee is, passeert dit allemaal, en het blijkt dat faculteit twee gelijk is aan twee keer faculteit één. Oké, dus wat is een factoriale? We noemen dit nog een keer. Het wordt hier genoemd. Faculteit één is gelijk aan één keer faculteitsnul, één keer faculteitsnul. Nou, wat is faculteit nul? Wordt opnieuw gebeld. Als het getal nul is, geven we één terug, dus faculteit nul is één, en het blijkt dat faculteit drie drie keer twee keer één keer één is, wat zes is, dus onze oorspronkelijke functieaanroep, faculteit drie, is gelijk aan zes, en uiteindelijk retourneert zes. Nu lijkt recursie in eerste instantie misschien magie, maar laat je niet intimideren. Het is gewoon een chique soort lus. Het duurt even voordat je het onder de knie hebt, maar het is ook een erg handige vaardigheid om in je programmeerrepertoire te hebben.
Oefen terwijl u leert met oefenbestanden
Download de bestanden die de cursusleider gebruikt tijdens de cursus. Volg de stappen en leer door te kijken, te luisteren en te oefenen.