Een programma over bestanden verdelen · eindproject
Eindproject: Project: splits de quizapplicatie in modules
Het hoofdstuk begon met zestig regels in één bestand. Het eindigt met een project waarvan je de vorm kunt lezen.
De voltooide indeling
quizapp/ the application package
__init__.py
models.py Question, Quiz, Attempt
scoring.py percentage, grade_letter, is_pass
report.py interface: facts turned into text
main.py entry point: what running this does
Drie lagen en afhankelijkheden die alleen naar beneden wijzen. main.py gebruikt de modellen en het rapport van het package. quizapp.report gebruikt scoring, scoring gebruikt models voor is_pass en models importeert niets erboven. Een package groepeert de modules; het wist hun afzonderlijke verantwoordelijkheden niet uit.
De models.py, scoring.py en report.py op het hoogste niveau uit het midden van het hoofdstuk zijn vervangen door de packageversies. Je kunt ze via het bestandenpaneel verwijderen; het voltooide programma importeert ze niet.
Iemand opent main.py en leest alleen de importregels. Wat moet die leren?
Wat er wordt gecontroleerd
main.pyimporteert het domein en het rapport uitquizapp, niet uit de vervangen kopieën op het hoogste niveau.Het definieert
main()en roept die alleen achter de uitvoercontrole aan.Importeren drukt niets af.
Het programma drukt een kop, de scoreregel en de regel met de letterbeoordeling af, in die volgorde.
Alleen main.py hoeft te veranderen. Alles wat het nodig heeft staat al in het project, geschreven of gegeven in de afgelopen zes lessen.
Afronden
Als het werkt, lees dan main.py van bovenaf en vraag wat iemand die nieuw is uit elke regel zou leren. Twee importregels, de quizbouwer en de mainfunctie, en één uitvoercontrole. Als een lezer daaruit zonder scrollen de structuur van het programma kan beschrijven, heeft het hoofdstuk zijn werk gedaan.
Hoofdstuk 11 verlaat het project weer en keert terug naar afzonderlijke bestanden, omdat het iteratieprotocol het makkelijkst zichtbaar is in tien regels zonder iets eromheen. Hoofdstuk 13 begint een nieuwe verwante quizwerkruimte voor testen en hoofdstuk 14 gebruikt modules voor het afsluitende bibliotheekproject. Je bestanden blijven in dit hoofdstuk bewaard, dus het is de moeite waard ze netjes achter te laten.
Opdracht
Verbind het voltooide project in main.py.
Importeer Attempt, Question en Quiz uit quizapp.models, en headline en report_lines uit quizapp.report. Importeer de vervangen modules models, scoring of report op het hoogste niveau niet.
Verwijder de oude definitie van report_lines uit main.py, zodat die de geïmporteerde functie niet kan overschrijven. Bestaande bestanden behouden je eerdere code wanneer je deze les opent.
Behoud build_quiz(), dat de Chapter 10 Review samenstelt: “Which keyword starts a function?” met antwoord def voor 2 punten en “Which keyword defines a class?” met antwoord class voor 3 punten.
main() bouwt de quiz, maakt een poging voor Mina, beantwoordt elke vraag met "def" en drukt de kop af, gevolgd door de rapportregels. Niets wordt bij het importeren uitgevoerd en het bestand eindigt met de uitvoercontrole.
Klik op Submit zodra het programma dit afdrukt:
Chapter 10 Review (5 points)
Mina: 2 of 5
Grade: F