Gevorderde Python-ontwikkelingscursus
Hoofdstuk
>
Niveau
Wiskundige Modules
Introductie Wiskundemodule
Doelstelling
Controleer kadastrale akten en perceellijnen op de boerderij, verifieer en verwerk getallen met behulp van de functies van de Math Module.
In het kantoor aan de uiterste rand van het hoofdgebouw bevindt zich een archief met oude bouwtekeningen van het gebouw en de kadastrale akten. Er zijn plannen om de boerderij naar het oosten uit te breiden, maar het is belangrijk om eerst al het papierwerk op orde te krijgen voordat je besluit naar bouwplannen te kijken. Dit wordt uitgevoerd met behulp van Python's math module.
import math
Net als de eerder gebruikte statistics module heeft de math module een verzameling wiskundige functies die we kunnen gebruiken om de ingebouwde bibliotheek van Python uit te breiden:
-
math.isnan(): Controleert of de ingevoerde waarde geen getal is -
math.isinf(): Controleert of de ingevoerde waarde een oneindig getal is -
math.isfinite(): Controleert of de ingevoerde waarde eindig is -
math.prod(): Vermenigvuldigt alle toegevoegde argumenten -
math.pow(): Neemt twee argumenten en geeft de waarde van het eerste argument tot de macht van het tweede argument terug. -
math.trunc(): Tronkeert het opgegeven argument, dit verwijdert de decimalen van een kommagetal, waardoor het een geheel getal wordt. (Rondt niet af, verwijdert ze alleen) -
math.copysign(): Neemt twee argumenten, kopieert het teken (-,+) van het tweede argument en past dit toe op het eerste. -
math.factorial(): Neemt een argument en vermenigvuldigt het getal aftellend tot 1. Bijvoorbeeld, als de waarde5is, gaat het:5x4x3x2x1en wordt er een resultaat verkregen.
We zullen deze functies gebruiken om data te analyseren en op te schrijven ter voorbereiding van de ontwikkelingsprojecten. Er zijn drie lijstconstanten die schema’s voor de boerderij bevatten, genaamd: red_schematics, green_schematics, blue_schematics. Deze schema’s bevatten niet-numerieke en onbruikbare waarden; gebruik de wiskundige functies om de elementen te identificeren en vind de bruikbare data zodat we deze kunnen registreren.
Loop eerst naar het donkere X-teken op het rode tapijt en gebruik een lus om de elementen van de lijstconstante red_schematics te doorlopen om de bruikbare elementen te identificeren.
for x in red_schematics: y = math.isnan (float(x)) if y == True: player.speak("Not a Number") else: y = math.isinf(float(x)) if y == True: player.speak("Is infinite") else: player.speak(x)
De lus doorloopt alle elementen van de lijst; de functie math.isnan() detecteert niet-numerieke waarden en math.isinf() identificeert oneindige waarden die niet bruikbaar zijn voor de dataverzameling. Maak een nieuwe lijst genaamd red_values en gebruik een list comprehension om de ongewenste elementen te verwijderen door math.isfinite() als filter te gebruiken, zoals dit: red_values = [x for x in red_schematics if math.isfinite(float(x))].
Voeg vervolgens alle getallen samen door de math.prod() functie te gebruiken om alle items in de lijst te vermenigvuldigen, zoals dit: red_values = math.prod(red_values).
Voer hetzelfde filterproces uit op de donkere X-tekens op het groene en blauwe tapijt, waarbij je de lijstconstanten green_schematics en blue_schematics gebruikt en de elementen consolideert in lijsten genaamd green_values en blue_values. Loop naar het gouden X-teken, richt je op het bureau en gebruik de in de editor voorgeprogrammeerde write() functie om de bruikbare schema-data op te schrijven. Zodra je alles hebt samengevoegd, loop je naar het lichte X-teken en gebruik je de open() functie om de volgende kamer te betreden.
Eenmaal in de volgende kamer bevinden zich enkele bureaus met akten van het land en coördinaten. Het is verstandig om wat data te noteren voordat je verdergaat met het controleren van de nieuwe toevoegingen aan de boerderij in het volgende gebied aan de overkant van de brug. Loop naar het lichte X-teken voor de krat met kaarten bij het eerste bureau, en gebruik de read() functie om indexdata van de kadastrale akten te verkrijgen.
Loop naar het donkere X-teken op het paarse tapijt, maak een variabele genaamd purple_data en gebruik de functie math.pow() om de verkregen data te vermenigvuldigen om coördinateninformatie te verkrijgen. Verhef de index tot de macht van 3, zoals dit: purple_data = math.pow( -index data- , 3 ), zorg ervoor dat je de eerder gelezen indexdata toevoegt. Gebruik vervolgens math.trunc() om de decimale gegevens uit de variabele te verwijderen, zoals dit: purple_data = math.trunc(purple_data). Zodra dit is voltooid, gebruik je op het X-teken de voorgeprogrammeerde write() functie in de editor met purple_data om de in de variabele opgeslagen data op te schrijven.
Om af te sluiten, loop naar het lichte X-teken voor het archiefkastje naast het bureau bovenaan. Gebruik de read() functie om opnieuw indexdata te verkrijgen; deze data moet worden uitgepakt om meer coördinateninformatie over het land te onthullen. Maak een variabele genaamd white_data om de in het bestand gevonden datowaarde op te slaan en een variabele genaamd sign om het in het bestand gevonden teken op te slaan. Loop naar het donkere X-teken op het witte tapijt en gebruik de functie math.copysign() met de twee aangemaakte variabelen als argumenten en ken de waarde toe aan white_data, zoals dit: white_data = math.copysign(white_data,sign).
Zodra dit is voltooid, gebruik je white_data met de functie math.factorial() om de index te vermenigvuldigen. Converteer white_data naar een integer en gebruik deze met de functie, zoals dit: white_data = math.factorial(int(white_data)). Gebruik de voorgeprogrammeerde write() functie om white_data op te schrijven en daarmee het level te voltooien.