Om de woordenschat van een vreemde taal aan te leren, worden soms "flash cards" gebruikt. Op deze kaarten staat het te leren woord, samen met mogelijke vertalingen. In deze oefening bouwen we een reeks klassen om de woordenschat van een taal via flash cards in te oefenen.
Een object van deze klasse stelt een flash card voor. Elke kaart wordt hierbij gekenmerkt door het woord in een vreemde taal, in combinatie met een aantal vertalingen van dit woord.
Programmeer in deze klasse:
__str__()
die als stringgedaante het woord (in de vreemde taal) en de geordende lijst van vertalingen (in de standaardstringgedaante
van die lijst) oplevert, gescheiden door 1 komma en het geheel tussen vierkante haakjes
==
.
Twee objecten van deze klasse zijn gelijk als en slechts als ze over hetzelfde woord gaan (dus ongeacht de mogelijke vertalingen).
__repr__()
-methode
punten()
met 1 string-argument. Deze methode levert de waarde 1 op indien het argument een geldige vertaling
van het woord is (m.a.w. het argument komt voor in de lijst mogelijke vertalingen), en levert de waarde 0 op in het andere geval.
a = FlashCard('ami', ['vriend', 'kameraad']) b = FlashCard('maison', ['huis']) c = FlashCard('humide', ['vochtig', 'nat']) str(a) # "[ami,['kameraad', 'vriend']]" str(b) # "[maison,['huis']]" str(b) # "[maison,['huis']]" a == b # False a == a # True a == c # False b == c # False a == eval(repr(a)) # True b == eval(repr(b)) # True c == eval(repr(c)) # True a.punten('kameraad') # 1 b.punten('kangoeroe') # 0 c.punten('regen') # 0
Een object van deze klasse stelt een reeks van flash cards voor.
Programmeer in deze klasse:
+=
. De oproep collectie += k
vertoont het volgende gedrag:
k
, dan wordt de kaart toegevoegd aan de collectie
k
toegevoegd aan de kaart in de collectie met hetzelfde woord als op kaart k
.
Een woord kan dus maar 1 keer voorkomen in een FlashCardCollectie
. Hierbij moet je ervoor zorgen dat de lijst van vertalingen geordend blijft, en geen dubbels bevat !
__str__()
levert de naam van de collectie, en het aantal kaarten in de collectie, gescheiden door
een komma, en het geheel tussen vierkante haakjes
collectie -= k
. Indien de collectie een kaart met het woord vermeld op
de kaart k
bevat, wordt deze kaart uit de collectie verwijderd. In het andere geval, gebeurt er niets.
get_cards()
levert de lijst van de opgeslagen flash cards, in de volgorde waarin ze toegevoegd werden aan de collectie
collectie = FlashCardCollectie('Frans0') rue = FlashCard('rue', ['straat']) janvier = FlashCard('janvier', ['januari']) papier = FlashCard('papier', ['papier']) rouge = FlashCard('rouge', ['rood']) police = FlashCard('police', ['politie']) table = FlashCard('table', ['tafel']) collectie += rue collectie += janvier collectie += papier collectie += rouge collectie += police collectie += table str(collectie) #'[Frans0,6]' collectie += FlashCard('rouge', ['rood', 'straat', 'straat']) [str(k) for k in collectie.get_cards()] #["[rue,['straat']]", "[janvier,['januari']]", "[papier,['papier']]", "[rouge,['rood', 'straat']]", "[police,['politie']]", "[table,['tafel']]"] collectie += FlashCard('pont', ['brug']) [str(k) for k in collectie.get_cards()] #["[rue,['straat']]", "[janvier,['januari']]", "[papier,['papier']]", "[rouge,['rood', 'straat']]", "[police,['politie']]", "[table,['tafel']]", "[pont,['brug']]"] collectie -= FlashCard('janvier', []) [str(k) for k in collectie.get_cards()] #["[rue,['straat']]", "[papier,['papier']]", "[rouge,['rood', 'straat']]", "[police,['politie']]", "[table,['tafel']]", "[pont,['brug']]"] collectie -= FlashCard('papier', []) [str(k) for k in collectie.get_cards()] #["[rue,['straat']]", "[rouge,['rood', 'straat']]", "[police,['politie']]", "[table,['tafel']]", "[pont,['brug']]"]
Een object van deze klasse stelt een speler voor die via flash cards de woordenschat van een vreemde taal inoefent. Deze speler wordt gekenmerkt door zin/haar en intelligentie (voorgesteld door een geheel getal 0 t.e.m. 10).
Programmeer in deze klasse:
__str__()
levert de naam van de speler, gevolgd door zijn/haar intelligentie, gescheiden door 1 komma en het geheel
tussen vierkante haakjes
get_antwoord()
heeft 1 argument van het type FlashCard
, en levert het antwoord van de speler op.
Om het antwoord te construeren genereer je een willekeuring getal, via de constructie n = random.randint(0, 9)
.
(Let erop slechts 1 keer deze methode op te roepen per oproep van de methode get_antwoord()
, nergens anders
random-getallen te genereren, en ook de seed niet aan te passen ! Anders zijn je resultaten niet via Dodona te controleren.).
Indien n < intelligentie
dan wordt de eerste geldige vertaling vermeld op de kaart als antwoord gegeven. In het andere geval luidt
het antwoord '?'
random.seed(100) speler = Speler('An Grootjans', 6) str(speler) # '[An Grootjans,6]' kaart = FlashCard('ami', ['vriend', 'kameraad']) str(speler.get_antwoord(kaart)) #'kameraad' str(speler.get_antwoord(kaart)) #'?' str(speler.get_antwoord(kaart)) #'?' str(speler.get_antwoord(kaart)) #'kameraad' str(speler.get_antwoord(kaart)) #'?'
Deze klasse stelt een speler een reeks vragen, en houdt de score van de speler bij. Programmeer in deze klasse:
FlashCardCollectie
speel_ronde()
met 2 argumenten, namelijk het aantal te spelen rondes (een niet-negatief geheel getal N
)
en een object van de klasse Speler
. De methode doorloopt de ganse collectie flash cards N
keer,
en vraagt de speler dus telkens een antwoord. Het resultaat is een tuple, met 2 elementen, namelijk de behaalde score gevolgd
door het aantal gestelde vragen (in dit geval is dit dus N
keer het aantal kaarten in de collectie).
random.seed(100) collectie = FlashCardCollectie('Frans0') ami = FlashCard('ami', ['vriend', 'kameraad', 'kompaan') chaise = FlashCard('chaise', ['stoel']) collectie += ami collectie += chaise speler1 = Speler('Sofie Daelemans',8) speler2 = Speler('Vincent Keereman',6) ronde = FlashCardRondeDefault(collectie) ronde.speel_ronde(4, speler1) #(7, 8) ronde.speel_ronde(4, speler2) #(6, 8)
Deze klasse erft over van de klasse FlashCardRondeDeafault
en brengt volgende wijzigingen aan:
M
speel_ronde()
wordt aangepast, zodat een kaart waarop minstens M
keer een
goed antwoord gegeven werd, niet langer aan de speler aangeboden wordt. De ronde stopt nu zodra N
rondes voltooid
werden OF de collectie geen kaarten meer bevat die kunnen aangeboden worden. Het resultaat is opnieuw een tuple van 2 gehele
getallen, namelijk de behaalde score gevolgd door het aantal gestelde vragen.
random.seed(100) collectie = FlashCardCollectie('Frans0') nouveau = FlashCard('nouveau', ['nieuw', 'origineel', 'ongekend']) chapelle = FlashCard('chapelle',['kapel']) bavard = FlashCard('bavard',['praatziek']) humide = FlashCard('humide', ['vochtig', 'nat']) collectie += nouveau collectie += chapelle collectie += bavard collectie += humide speler1 = Speler('David Derudder',7) speler2 = Speler('Evelien Mottart',10) ronde1 = FlashCardRondeDefault(collectie) ronde1.speel_ronde(5, speler1) # (15, 20) ronde1.speel_ronde(5, speler2) # (20, 20) ronde2 = FlashCardRondeMoeilijkheidsgraad(collectie, 2) ronde2.speel_ronde(5, speler1) #(7, 10) ronde2.speel_ronde(5, speler2) #(8, 8)