class NotBolsheError(Exception):
def __init__(self):
pass
class ImprovedMensheMixin:
def menshe(self, is_a):
is_ravno = False
try:
is_ravno = self.ravno(is_a)
except NotBolsheError:
# Safe to return true there.
return True
else:
raise NotBolsheError
class BolsheMensher(ImprovedMensheMixin):
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
try:
self.menshe(is_a=True)
except NotBolsheError:
try:
self.menshe(is_a=False)
except NotBolsheError:
return 'A ravno B'
else:
return 'A bolshe B'
else:
return 'A menshe B'
def _set_operands(self, is_a):
return (self.a, self.b) if is_a else (self.b, self.a)
def bolshe(self, is_a):
a, b = self._set_operands(is_a)
if a > b:
return True
raise NotBolsheError
def ravno(self, is_a):
a, b = self._set_operands(is_a)
if a == b:
return True
self.bolshe(is_a)
def menshe(self, is_a):
'''Wrapper over bolshe and ravno methods for user convenience.'''
is_ravno = False
try:
is_ravno = self.ravno(is_a)
except NotBolsheError:
# Safe to return true there.
return True
else:
raise NotBolsheError
print(BolsheMensher(6, 4))
print(BolsheMensher(4, 4))
print(BolsheMensher(4, 6))
Y2xhc3MgTm90Qm9sc2hlRXJyb3IoRXhjZXB0aW9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCgpjbGFzcyBJbXByb3ZlZE1lbnNoZU1peGluOgoJZGVmIG1lbnNoZShzZWxmLCBpc19hKToKCSAgICBpc19yYXZubyA9IEZhbHNlCgkgICAgdHJ5OgoJICAgICAgICBpc19yYXZubyA9IHNlbGYucmF2bm8oaXNfYSkKCSAgICBleGNlcHQgTm90Qm9sc2hlRXJyb3I6CgkgICAgICAgICMgU2FmZSB0byByZXR1cm4gdHJ1ZSB0aGVyZS4KCSAgICAgICAgcmV0dXJuIFRydWUKCSAgICBlbHNlOgoJICAgICAgICByYWlzZSBOb3RCb2xzaGVFcnJvciAKIApjbGFzcyBCb2xzaGVNZW5zaGVyKEltcHJvdmVkTWVuc2hlTWl4aW4pOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgogICAgICAgIHNlbGYuYSA9IGEKICAgICAgICBzZWxmLmIgPSBiCiAKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIHRyeToKICAgICAgICAgICAgc2VsZi5tZW5zaGUoaXNfYT1UcnVlKQogICAgICAgIGV4Y2VwdCBOb3RCb2xzaGVFcnJvcjoKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgc2VsZi5tZW5zaGUoaXNfYT1GYWxzZSkKICAgICAgICAgICAgZXhjZXB0IE5vdEJvbHNoZUVycm9yOgogICAgICAgICAgICAgICAgcmV0dXJuICdBIHJhdm5vIEInCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0EgYm9sc2hlIEInCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmV0dXJuICdBIG1lbnNoZSBCJwogCiAgICBkZWYgX3NldF9vcGVyYW5kcyhzZWxmLCBpc19hKToKICAgICAgICByZXR1cm4gKHNlbGYuYSwgc2VsZi5iKSBpZiBpc19hIGVsc2UgKHNlbGYuYiwgc2VsZi5hKQogCiAgICBkZWYgYm9sc2hlKHNlbGYsIGlzX2EpOgogICAgICAgIGEsIGIgPSBzZWxmLl9zZXRfb3BlcmFuZHMoaXNfYSkKICAgICAgICBpZiBhID4gYjoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICByYWlzZSBOb3RCb2xzaGVFcnJvcgogCiAgICBkZWYgcmF2bm8oc2VsZiwgaXNfYSk6CiAgICAgICAgYSwgYiA9IHNlbGYuX3NldF9vcGVyYW5kcyhpc19hKQogICAgICAgIGlmIGEgPT0gYjoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICBzZWxmLmJvbHNoZShpc19hKQogCiAgICBkZWYgbWVuc2hlKHNlbGYsIGlzX2EpOgogICAgICAgICcnJ1dyYXBwZXIgb3ZlciBib2xzaGUgYW5kIHJhdm5vIG1ldGhvZHMgZm9yIHVzZXIgY29udmVuaWVuY2UuJycnCiAgICAgICAgaXNfcmF2bm8gPSBGYWxzZQogICAgICAgIHRyeToKICAgICAgICAgICAgaXNfcmF2bm8gPSBzZWxmLnJhdm5vKGlzX2EpCiAgICAgICAgZXhjZXB0IE5vdEJvbHNoZUVycm9yOgogICAgICAgICAgICAjIFNhZmUgdG8gcmV0dXJuIHRydWUgdGhlcmUuCiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgcmFpc2UgTm90Qm9sc2hlRXJyb3IKIAogCiAKcHJpbnQoQm9sc2hlTWVuc2hlcig2LCA0KSkKcHJpbnQoQm9sc2hlTWVuc2hlcig0LCA0KSkKcHJpbnQoQm9sc2hlTWVuc2hlcig0LCA2KSk=