Frequently Asked Questions (FAQ)
- Wat betekent de naam van het project?
Pythia is de naam van de orakelpriesteres in het heiligdom van Apollo Pythios te Delphi (dat in oeroude tijden nog Pytho heette). De bronnen over de Pythia zijn eerder schaars, en laten enkel toe vast te stellen dat zij voor het leven werd gekozen, of door loting aangewezen, uit een aantal kandidaten die geschikt leken om als gewillig medium op te treden voor de openbaringen van de godheid. Na haar uitverkiezing verbleef de Pythia in een speciaal voor haar ingerichte "ambtswoning" binnen het heiligdom. Zij fungeerde dan als "doorgeefluik" van de goddelijke raadgevingen.
Als interactieve leeromgeving voor de evaluatie van programmeeroefeningen, zoeken we met project Pythia naar een geautomatiseerde manier om feedback te geven aan studenten die leren programmeren. Waar verondersteld wordt dat het orakel Pythia uit de klassieke oudheid in een autosuggestieve trance ging, waardoor ze onsamenhangende klanken begon uit te stoten waar niemand iets van begreep, maar waarvan men aannam dat de boodschap van de goden kwam, zoeken we met project Pythia eerder naar direct bruikbare feedback die het proces om computerprogramma’s te leren schrijven moet helpen ondersteunen. Al blijft leren programmeren een proces waarin men met vallen en opstaan (ook wel trial-and-error genaamd) leert om te durven denken.
- Hoe kan ik registreren?
Voor je oplossingen van programmeeroefeningen kunt indien op Pythia, moet je eerst een account aanmaken op het platform. Registreren kan via deze link (http://www.spoj.com/register/). Vul je gebruikersnaam (username) in, je UGent-e-mailadres en kies een paswoord. Een registratie is enkel geldig als je je UGent emailadres opgeeft. Studenten die registreren met een ander e-mailadres kunnen niet geëvalueerd worden! Druk op het witte vierkant bij I'm not a robot en bewijs je menselijkheid. Je UGent emailadres kan je terugvinden op Minerva onder Mijn profiel. Druk up Create Account en vul verder in. Velden die niet met een rode ster zijn aangeduid zijn optioneel en moet je niet verplicht invullen. Druk op Finish onderaan. Het is aangeraden om je e-mail te verifiëren. Indien je dit niet doet, zal het systeem hierop aandringen telkens wanneer je aanmeldt. Surf hiervoor naar je UGent mailbox via webmail.ugent.be en zoek naar de e-mail van Sphere Online Judge (spoj). Door op de eerste link te klikken is de verificatie, en daarmee ook de volledige procedure van het inschrijven voltooid. Herlaad de hoofdpagina en meld je aan via het menu-item sign in.
Het indienen van oefeningen wordt beschreven in de videohandleiding registreren en oefeningen indienen bij Pythia. Het registratiegedeelte van deze video is verouderd en mag je overslaan. We proberen zo snel mogelijk een nieuwe versie van deze video te maken waarin de goede registratieprocedure uitgelegd wordt. - Hoe kan ik mijn oplossing inzenden?
- Je lost de oefening op via Eclipse/PyDev. Je bewaart dit bestand als Python-file
- In Pythia kies je bij het op te lossen probleem voor Indienen
- Dan heb je twee mogelijkheden:
- Blader en zoek het bewaarde Python-bestand
- of kopieer de code uit de Eclipse/PyDev-editor en plak deze code hier
- Klik nu op Indienen en je oplossing wordt verzonden.
- Hoe moet ik de beoordeling van mijn oplossing interpreteren?
Na de automatische beoordeling van je ingezonden oplossing wordt een van de volgende resultaten teruggegeven:- correct: je programma kon zonder probleem uitgevoerd worden en gaf het correcte antwoord.
- verkeerd antwoord: je programma kon zonder probleem uitgevoerd worden maar gaf een foutief antwoord (logische fout).
- tijdslimiet overschreden: je programma kon zonder probleem gecompileerd worden, maar eindigde niet voor de vooropgestelde tijdslimiet.
- compileerfout: je programma kon niet gecompileerd worden (syntactische fout). De foutboodschap kan aangeklikt worden waarna je meer informatie krijgt over deze syntactische fout. Er wordt eveneens vermeld op welke regel deze fout voorkomt.
- fout tijdens uitvoeren: je programma kon zonder probleem
gecompileerd worden, maar gaf een fout tijdens het uitvoeren.
Wanneer de boodschap fout tijdens uitvoeren aanklikbaar
is, kan je meer informatie over de fout krijgen. Volgende codes
worden gebruikt om fouten tijdens het uitvoeren verder op te delen:
- SIGSEGV (signaal 11): komt meest voor en staat voor "segmentation fault"
- SIGXFSZ (signaal 25): "output limit exceeded"
- SIGFPE (signaal 8): "output limit exceeded", bv. deling door nul
- SIGABRT (signaal 6): fout die door het programma doelbewust werd opgeworpen
- SIGNZEC: "non-zero exit code", helpt om onderscheid te maken tussen WA en crash bij geïnterpreteerde talen (zoals Python)
- other: er zijn nog andere signalen die een programma foutief kunnen laten beëindingen, deze worden allemaal aanduid met other
- Hoe moet ik het verschil tussen mijn oplossing en de verwachte
oplossing interpreteren?
Bij sommige oefeningen zal je opmerken dat als je een foute oplossing indient de woorden verkeerd antwoord, compileerfout of fout tijdens uitvoeren klikbaar zijn. In het geval van een compileerfout of een fout tijdens uitvoeren geeft je dit meer informatie over de fout en over de plaats waar deze fout in je code voorkomt. Als je hier bij een verkeerd antwoord op klikt, krijg je het verschil te zien tussen jouw uitvoer en de verwachte uitvoer in een tabel.
Wanneer een vinkje staat in het aankruisvakje linksbovenaan in de tabel, dan worden zowel de (groene) testgevallen die correct werden verwerkt als de (oranje) testgevallen die een foute uitvoer opleverden, getoond. Wanneer het aankruisvakje uitgevinkt wordt, dan worden enkel de regels getoond waar er een verschil is tussen de verwachte uitvoer en de gegenereerde uitvoer. In de kolom verwachte uitvoer wordt in het rood de stukken aangeduid die ontbreken in jouw uitvoer, in de kolom gegenereerde uitvoer wordt in het groen stukken aangeduid die teveel zijn in jouw uitvoer. Via een knop rechtsboven in de tabel kan je het al dan niet weergeven van regelnummers instellen. De tabel toont de regelnummers (in vakjes met een blauwe achtergrond) zowel bij de verwachte uitvoer als de gegenereerde uitvoer. Door de beperkte kolombreedte kan een uitvoerregel in de tabel eventueel uitgeschreven worden over meerdere lijnen, de getoonde regelnummers geven echter aan over hoeveel werkelijke regels het gaat.
- Waarvoor staan de sterretjes bovenaan een probleemomschrijving?
Deze sterretjes geven een idee over de moeilijkheid van de opgave. Deze moeilijkheidsgraad wordt aangeduid op een schaal van 0 tot 5, waarbij 0 staat voor een zeer makkelijke opgave en 5 staat voor een extreem moeilijke opgave.
- Wat zijn de gangbare stijlregels bij het schrijven van Python
programmacode?
Deze regels worden uitgelegd op deze pagina: Style Guide for Python Code. We vatten voor jou echter kort de basisregels hier samen:Eén van de basisideeën waarrond Python opgebouwd is, is de observatie dat programmacode veel vaker gelezen wordt dan dat hij geschreven wordt. Daarom laat Python je toe om zeer leesbare programmacode te schrijven. Je moet je dan natuurlijk zelf ook aan enkele conventies houden. Ook voor je eigen oefeningen zijn deze conventies zeer belangrijk. Je denkt misschien niet dat er zoveel mensen je programmacode zullen lezen, maar de voornaamste lezer — die echter het meest vergeten wordt — is je toekomstige ik. Door je aan bepaalde conventies te houden, voorkom je dat je een paar maand later opnieuw gaat moeten beredeneren wat je juist dacht op het moment dat je de programmacode schreef. We geven hier een kort overzicht van de conventies die voor jullie van toepassing zijn.
Lay-out
Opmaak is uiterst belangrijk in Python en correct gebruik ervan wordt afgedwongen doordat Python uitlijning gebruikt als een manier om blokken te groeperen. Er zijn twee simpele regels waar je je best houdt:
- Gebruik steeds 4 spaties om een nieuwe blok te starten!
- Gebruik nooit tabs!
Naast uitlijning zijn lege regels ook van belang om je programmacode overzichtelijk te houden. Laat steeds een lege regel tussen twee functie- en klassedefinities.
Imports
Als je zaken importeert, dan groepeer je best al je import statements bovenaan de module.
Witruimte
Spaties zijn belangrijk om je programmacode te verlichten tijdens het lezen. Te veel spaties kunnen de samenhang tussen je programmacode echter verbreken. Daarom zijn er ook enkele regels wanneer je wel en geen spaties moet gebruiken.
Niet
- Direct na het openen van haakje (, [ of { en direct voor het sluiten van een haakje ), ] of }
- Direct voor een komma, een puntkomma of een dubbelpunt
- Tussen een functienaam en zijn argumentenlijst in een functieaanroep
- Tussen een lijst of dictionary en de haakjes die de index of de slicing bevat.
- Extra spaties rond een operator om het te laten uitlijnen met andere operatoren
Wel
- Plaats steeds een spatie langs beide zijden van een operator
Regeleinden
Plaats steeds één statement per regel!
Commentaar
Alhoewel de computer niets begrijpt van de commentaar die je toevoegt aan je programmacode, is deze toch van cruciaal belang. Commentaar dient om uit te leggen aan menselijke lezers wat je bedoelingen waren op het moment dat je een bepaalde regel schreef. Goede commentaar herhaalt niet wat er in de programmacode staat, maar verklaart de bedoeling van de programmacode.
Een voorbeeld van slechte commentaar is bvb.
# ken s[::-1] toe aan de variable s
s = s[::-1]
Terwijl een voorbeeld van goede commentaar zou zijn:
# draai de string s om
s = s[::-1]
Probeer in je commentaar steeds zo volledig mogelijke zinnen te schrijven en vermijd voornamelijk cryptische commentaren van één of twee woorden.
Namen geven
Variabelen en functies geef je steeds een naam die begint met een kleine letter. Vervolgens gebruik je het zogenoemde CamelCase, d.w.z. dat je nieuwe woorden met een hoofdletter schrijft:
voorbeeldVariabeleMetLangeNaam = 42
Constanten schrijf je volledig in hoofdletters en verschillende woorden scheid je met een underscore (_):
MAXIMUM_SNELHEID = 120
Ten slotte moet je er bij het geven van namen ook op letten dat je zo vaak als mogelijk probeert om zinvolle namen te gebruiken. Eén-letter-variabelen zijn niet an sich slecht, maar als al je variabelen uit één letter bestaan, kan dit soms de leesbaarheid verminderen. Vergelijk bvb. het volgende statement:
c = a * b
met het herschreven statement:
bedragInDollar = bedragInEuro * wisselkoers
- Als ik de website bezoek, wordt er mij gevraagd om een certificaat
goed te keuren. Hoe moet ik hiermee omgaan?
Aangezien gegevens die over Internet getransporteerd worden redelijk eenvoudig kunnen onderschept en gelezen worden door onbevoegden, wordt het transport van gegevens in sommige gevallen beveiligd via SSL (Secure Socket Layer). Dit is bv. zo voor connecties waarbij transport van wachtwoorden naar de server noodzakelijk is.
Hiervoor zal de eerste keer dat er een connectie opgebouwd wordt met deze service, een zogenaamd certificaat moeten geïmporteerd worden in uw webbrowser of mailclient. Eens geïnstalleerd zal dit certificaat gebruikt worden om de authenticiteit van de verbinding te garanderen, en zal alle communicatie tussen uw client en de server volledig gecodeerd verlopen.
Om te vermijden dat dat voor elke service opnieuw moet gebeuren, wordt een certificaat getekend door een Certificate Authority (CA). In webbrowsers en mailclients wordt een lijst opgenomen van betrouwbare CA's. Dat wil zeggen dat alle certificaten ondertekend door die CA's zonder meer aanvaard worden. Om makkelijk te kunnen werken met de website, kan je dus ook best de CA installeren die voor dit project gebruikt wordt. Klik hier voor gedetailleerde uitleg voor het installeren van een CA voor een aantal verschillende browsers.