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?

    Bij je eerste bezoek aan Pythia moet je eerst registreren. Dit kan via de knop registreren
    • gebruikersnaam: je UGent-gebruikersnaam
    • vul verder minimaal in: je naam (zowel voornaam als familienaam), je UGent-e-mailadres en een paswoord. Een registratie is enkel geldig met je UGent-gegevens. Studenten die registreren met een ander e-mailadres kunnen niet geëvalueerd worden!
    • facultatief zijn:
      • instituut: Ghent University
      • standaard programmeertaal: Python 2.5
      Je hoeft echter niet te reageren op de activatiemail die je toegestuurd wordt.

  • Hoe moet ik de beoordeling van mijn oplossing interpreteren?

    Na de automatische beoordeling van je ingezonden oplossing wordt een van de volgende resultaten teruggegeven:
    1. correct: je programma kon zonder probleem uitgevoerd worden en gaf het correcte antwoord
    2. verkeerd antwoord: je programma kon zonder probleem uitgevoerd worden maar gaf een foutief antwoord (logische fout)
    3. tijdslimiet overschreden: je programma kon zonder probleem gecompileerd worden, maar eindigde niet voor de vooropgestelde tijdslimit
    4. compileerfout: je programma kon niet gecompileerd worden (syntactische fout)
    5. fout tijdens uitvoeren: je programma kon zonder probleem gecompileerd worden, maar gaf een fout tijdens het uitvoeren; volgende codes worden gebruikt om fouten tijdens het uitvoer 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. Als je hier op klikt, krijg je bij deze oefeningen het verschil te zien tussen jouw uitvoer en de verwachte uitvoer. Deze uitvoer kan op één van twee manieren voorgesteld zijn: ofwel als een tekstueel verschil ofwel als tabel. In beide gevallen worden enkel de regels getoond die verschillen.
    In het geval van een tekstueel verschil wordt de verwachte regel voorafgegaan door een - teken en jouw gegenereerde uitvoer voorafgegaan door een + teken. Onder elke regel staat er ook een regel die begint met een vraagteken. Op deze regel worden de verschillen aangeduid. Een - teken onder de verwachte regel duidt op een stuk dat ontbreekt in jouw uitvoer, een + teken onder de gegenereerde regel duidt op een stuk dat teveel is in jouw uitvoer en een ^ teken onder beide regels duidt op een stuk dat verschilt in beide uitvoeren.
    Als het verschil als een tabel wordt weergegeven, dan staan de regels die verschillen naast elkaar. 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 en in beide kolommen wordt in het blauw aangeduid wat verschilt tussen beide uitvoeren.

  • 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 indek 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.


  • 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.

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.