ITI0140:Ülesanne 10
EX08 vol 2 - Madise lähetamine
Nüüd, kus olete Madisele kirjutanud testid, et Madise koodi hinnata, on Madis aru saanud, et Madise kood ei olnud suurem asi. See-eest on ta mõistnud, et teie kirjutate püütoni koodi palju paremini. Seetõttu soovib Madis, et kirjutaksite talle kõnekeskuse programmi ise.
NB: Kuna aga Madis on hiljuti lugenud sellest, kui energia- ja töösäästlikud on generaator ja list comprehension, on ta teid kohustanud mõlemit teie lahenduses kasutama.
Meeldetuletuseks, kõnekeskuse tarkvara peaks olema klass nimega CallCentre. CallCentre-il on meetod create_sentence, mis võtab sisse lause süntaktilise vormi sõnena, ja tagastab reeglistikule vastava lause. Reeglid on järgnevad:
noun = koer | porgand | madis | kurk | tomat
target = koera | porgandit | madist | kurki | tomatit
verb = sööb | lööb | jagab | tahab | ei taha
adjective = ilus | kole | pahane | magus | sinu
targetadjective = ilusat | koledat | pahast | magusat | sinu
sentence = noun verb target .
beautifulsentence = adjective noun verb targetadjective target .
twosentences = sentence sentence
Kusjuures, kui kasutada mõnd reeglit, nagu noun, või target, siis peab programm järgmine kord tagastama järgmise sõna, minnes tagasi algusesse, kui jõutakse sõnade lõppu. Lisaks tuleb tähele panna, et tundmatu sõna/sümbol tuleb vastuses hoida muutmata. Kõik reeglid on ainult väikeste tähtedega.
NB: Lahenduses tuleb kasutada nii list comprehensionit (näiteks sõnade järjendikuks tegemisel), kui ka generaatorit (sobib väga hästi sõnade genereerimiseks, nii ei pea hoidma klassis nn count muutujat)
Näiteks:
centre = CallCentre()
centre.create_sentence('noun !') -> 'koer !'
centre.create_sentence('noun verb target ?!') -> 'porgand sööb koera ?!'
centre.create_sentence('beautifulsentence noun .') -> 'ilus madis lööb koledat porgandit . kurk .'