Al menos Python es más fácil de entender :-). También me dió un excusa para mostrarles un poco de herencia y otros trucos de objetos en el lenguaje:
#!/usr/bin/env python3
# A little fun with the candidates for the US presidency for 2016 election year
# @author josevnz@kodegeek.com
#
class Candidate:
def __init__(self, name, party, sex="F", age=18):
self.__name = name
self.__party = party
self.__sex = "F" if sex not in ["M", "F"] else sex
self.__age = 18 if not (18 < = age <= 120) else age
@property
def name(self):
return self.__name
@property
def party(self):
return self.__party
@property
def sex(self):
return self.__sex
@property
def age(self):
return self.__age
def __hash__(self):
return hash(id(self))
def __str__(self):
return "Candidate=[name={0}, party={1}, sex={2}, age={3}]".format(
self.__name,
self.__party,
self.__sex,
self.__age
)
def __repr__(self):
return "{0}{1}{2}{3}{4}".format(
self.__class__.__name__,
self.__name,
self.__party,
self.__sex,
self.__age
)
def __invert__(self):
raise NotImplemented()
# Are you a Democrat?
def __bool__(self):
raise NotImplemented()
def __lt__(self, other):
return self.__age < other.__age
def __gt__(self, other):
return self.__age > other.__age
def __eq__(self, other):
return (
self.__age == other.__age and
self.__name == other.__name and
self.__party == other.__party and
self.__sex == other.__sex
)
class Republican(Candidate):
def __init__(self, name, sex="F", age=21):
return super().__init__(name, "Republican party", sex, age)
def __bool__(self):
return False
def __invert__(self):
raise NotImplementedError()
class Democrat(Candidate):
def __init__(self, name, sex="F", age=21):
return super().__init__(name, "Democratic party", sex, age)
def __bool__(self):
return True
def __invert__(self):
raise NotImplementedError()
if __name__ == "__main__":
candidates = []
candidates.append(Democrat("Hillary Clinton", "F", 68))
candidates.append(Republican("Donald Trump", "M", 70))
candidates.append(Democrat("Bernie Sanders", "M", 75))
candidates.append(Republican("Marco Rubio", "M", 45))
for candidate in sorted(candidates, reverse=True):
isDemocrat = "yes" if candidate else "no"
print("Candidate: {0}, democrat? {1}".format(candidate, isDemocrat))
And the output for this run:
Candidate: Candidate=[name=Bernie Sanders, party=Democratic party, sex=M, age=75], democrat? yes
Candidate: Candidate=[name=Donald Trump, party=Republican party, sex=M, age=70], democrat? no
Candidate: Candidate=[name=Hillary Clinton, party=Democratic party, sex=F, age=68], democrat? yes
Candidate: Candidate=[name=Marco Rubio, party=Republican party, sex=M, age=45], democrat? no
Ahora si sólo pudiera escribir algo tan sencillo como esto para saber los resultados de las elecciones del 2016 🙂