HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythonMinor

Command line tool for Italian language studies

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
linelanguagestudiestoolforcommanditalian

Problem

I made a small command line tool to help my Italian studies. Any thoughts on how it could be improved? I can't think of much but would like to be proved wrong.

```
import random

class RegularVerb(object):
def __init__(self, name):
self._name = name

def name(self):
return self._name

def _make(self, verb_end):
return self.name()[:-3] + verb_end

def _build_condizionale_semplice(self, verb_forms, prefix):
def verb_base(prefix):
return (prefix + condizionale_semplice_base
for condizionale_semplice_base in
['rei', 'resti', 'rebbe', 'remmo', 'reste', 'rebbero']
)
return dict(zip(verb_forms, verb_base(prefix)))

class EreVerb(RegularVerb):
def __init__(self, name, verb_forms):
super(EreVerb, self).__init__(name)
self._condizionale_semplice = self._build_condizionale_semplice(verb_forms, 'e')

def condizionale_semplice(self, verb_form):
return self._make(self._condizionale_semplice[verb_form])

class IreVerb(RegularVerb):
def __init__(self, name, verb_forms):
super(IreVerb, self).__init__(name)
self._condizionale_semplice = self._build_condizionale_semplice(verb_forms, 'i')

def condizionale_semplice(self, verb_form):
return self._make(self._condizionale_semplice[verb_form])

class AreVerb(RegularVerb):
def __init__(self, name, verb_forms):
super(AreVerb, self).__init__(name)
self._condizionale_semplice = self._build_condizionale_semplice(verb_forms, 'e')

def condizionale_semplice(self, verb_form):
return self._make(self._condizionale_semplice[verb_form])

class Questioner():

def __init__(self, verb_forms, verbs):
self._verb_forms = verb_forms
self._verbs = verbs

def _handle_answer(self, user_answer, correct_answer):
if user_answer == correct_answer:
print "bravo!"
else:
print "no, co

Solution

Maybe this could provide of a more neat way of relating verbs with veb_forms:

verb_binder = dict(are=AreVerb, ire=IreVerb, ere=EreVerb)

def build_regular_verbs(verbs, verb_forms):
    def make(verb):
        try:
            return verb_binder[verb[-3:]](verb, verb_forms)
        except KeyError:
            raise Exception("not a regular verb")

    return [make(v) for v in verbs]


not sure if verb_binder dictionary should be a module global or local to the function or maybe it should be located elsewhere, but this is the idea.

Code Snippets

verb_binder = dict(are=AreVerb, ire=IreVerb, ere=EreVerb)

def build_regular_verbs(verbs, verb_forms):
    def make(verb):
        try:
            return verb_binder[verb[-3:]](verb, verb_forms)
        except KeyError:
            raise Exception("not a regular verb")

    return [make(v) for v in verbs]

Context

StackExchange Code Review Q#6385, answer score: 3

Revisions (0)

No revisions yet.