Python Retard Calculator

We hebben een eenheden conversie tool gemaakt in Python. We zijn begonnen met het omrekenen van Amerikaanse eenheden (imperiaal systeem) naar de ‘normale’ eenheden (metrisch systeem), welke door de rest van de wereld gebruikt worden. Omdat we de Imperiale eenheden niet logisch vonden hebben we onze tool met een knipoog de “retard calculator” genoemd.

Hoe opgezet?

Zelf hadden we beide nog niet een uitgebreide ervaring met Python, hetgeen wat in de tool zichtbaar is, is eigenlijk wat wij door de cursus geleerd hebben. Uiteraard heeft het raadplegen van Google en onze docenten (Matej en Michael) ook geholpen. Omdat onze ervaring zeer gering was besloten wij klein te beginnen. Onze eerste versie van de tool was redelijk basic opgezet. Je kreeg hier vooraf de welke eenheid je naar welke andere eenheid wilde omrekenen, bijvoorbeeld van inch naar centimeter. Hier hebben we uiteindelijk ook van Fahrenheit naar Celsius en pond naar kilogram aan toegevoegd. Als gebruiker van de tool was je dus redelijk gelimiteerd in wat je kon omrekenen, maar hé het werkte dus dat was voor ons al heel wat, tijd om dit verder uit te breiden.

De afbeelding geeft misschien een beter beeld:

De tool verder uitbreiden

Vervolgens wilde we de tool verder uitbreiden. De tool zou meer moeten werken zoals je omreken tools ziet op verschillende sites. We wilde dus kijken of we de keuze meer bij de gebruiker konden laten liggen in wat er berekend moest worden. Dit zou betekenen dat de gebruiker van inch naar centimeter, maar ook naar kilometer en bijvoorbeeld yard zou moeten kunnen rekenen, maar ook andersom. Zo zijn er ook verschillende gewichtseenheden in het imperiale systeem waarvoor we hetzelfde wilde bereiken en zo heb je ook drie verschillende eenheden temperatuur welke over en weer berekend zouden moeten kunnen worden.

De uitdaging

De uitdaging zat hem hierin dat er vooraf dus een soort keuze moest komen wat de gebruiker naar welke eenheid zou willen berekenen. Foutieve informatie moet afgevangen zodat de gebruiker alleen getallen kon invullen. Ook wilde we op voorhand al voorkomen dat de gebruiker zou proberen om van Celsius naar Yard te rekenen. Dit heeft geresulteerd in een keuzemenu + prachtige ASCII-art, zoals onderstaand te zien:

Een gebruiker geeft hier simpelweg op wat er berekend moet worden. Na de initiële keuze van bijvoorbeeld de “Length Calculator” komt het onderstaande keuzemenu tevoorschijn. De gebruiker kan met de pijltjes toetsen een van onderstaande opties selecteren voor de vanaf eenheid en dit met enter bevestigen, ditzelfde voor naar welke eenheid gerekend moet worden.

Vervolgens wordt er een aantal opgegeven en zal de tool de berekening uitvoeren. De menustructuur wordt gemaakt door de python tool “Inquirer”, deze zit niet standaard in Python, maar is gemakkelijk te importeren. De tool werkt met zijn eigen lijst welke deze in een menustructuur plaatst, de keuze die je als gebruiker maakt wordt vervolgens in een variabele opgeslagen.

De tool zelf rekent helemaal niets uit en je kunt ook geen gebruik maken voor de berekening van de factor 10, zoals je dit in een metrisch systeem zou doen. Bovendien kan een gebruiker er ook voor kiezen om binnen het imperiale systeem een berekening te doen. Wat we dus hebben moeten doen is alle verschillende mogelijkheden die berekend zouden kunnen worden en hun omrekenfactor in onze code verwerken. Onze eerste ruwe versie zag er ongeveer zo uit:

Hierbij hebben we een functie gemaakt van elk van de eenheden met hierin de omrekenfactor naar een van de andere mogelijke eenheden. Je hier meerdere functies staan, als je ze uitklapt is dit allemaal gebaseerd op hetzelfde om zo van en naar elkaar toe te kunnen rekenen. Dit was een hels karwij om helemaal uit te werken en we hadden toch het idee dat dit overzichtelijker te verwerken moest zijn.

Na wat uitzoek werk hebben we dezelfde eenheden uiteindelijk in een dictionary weten te krijgen, zoals onderstaand te zien. Je ziet hier niet alle eenheden, maar de rest spreekt voor zich.

De eenheden zijn binnen de dictionary aan hun conversie getal gekoppeld, dus dit hebben we wel over kunnen nemen van de eerste opzet. De functie werkt roept dan aan de hand van de input variabele de desbetreffende functie aan, dus als de gebruiker millimeter kiest bij “what do you want to calculate from dan wordt de functie millimeter geselecteerd. Vervolgens wordt het antwoord dat de gebruiker kiest bij “what do you want to calculate to” dan gebruikt in diezelfde functie om zo de omrekenslag te kunnen maken .

Na dit uiteindelijk werkend gekregen te hebben was het een herhaling van zetten voor zowel de temperature als de weight calculator.

De laatste loodjes

Als laatst hebben we nog wat error handling toegevoegd om te zorgen dat de gebruiker de juiste gegevens invoert of anders te horen krijgt wat er misgaat. Verder hoort bij het finetunen ook comments toevoegen zodat voor eenieder duidelijk wordt wat er binnen de code gebeurt. Als laatst hadden we al ASCII art voor bij het starten van het programma, maar ook nog eentje om hem af te sluiten:

Greater BV

Boeingavenue 217 (4th floor)
1119 PD Schiphol-Rijk

hello@greater.nl
backoffice@greater.nl
sales@greater.nl

Backoffice: +31 (0)85 303 64 28
Sales: +31 (0)85 303 64 23