class NotBolsheError(Exception):
def __init__(self):
pass
class BolsheMensher(object):
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
if is_ravno:
# Return NotBolsheError since it is also a case.
raise NotBolsheError
return True
print(BolsheMensher(6, 4))
Y2xhc3MgTm90Qm9sc2hlRXJyb3IoRXhjZXB0aW9uKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBwYXNzCgoKY2xhc3MgQm9sc2hlTWVuc2hlcihvYmplY3QpOgogICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIpOgogICAgICAgIHNlbGYuYSA9IGEKICAgICAgICBzZWxmLmIgPSBiCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgdHJ5OgogICAgICAgICAgICBzZWxmLm1lbnNoZShpc19hPVRydWUpCiAgICAgICAgZXhjZXB0IE5vdEJvbHNoZUVycm9yOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBzZWxmLm1lbnNoZShpc19hPUZhbHNlKQogICAgICAgICAgICBleGNlcHQgTm90Qm9sc2hlRXJyb3I6CiAgICAgICAgICAgICAgICByZXR1cm4gJ0EgcmF2bm8gQicKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHJldHVybiAnQSBib2xzaGUgQicKICAgICAgICBlbHNlOgogICAgICAgICAgICByZXR1cm4gJ0EgbWVuc2hlIEInCgogICAgZGVmIF9zZXRfb3BlcmFuZHMoc2VsZiwgaXNfYSk6CiAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYikgaWYgaXNfYSBlbHNlIChzZWxmLmIsIHNlbGYuYSkKCiAgICBkZWYgYm9sc2hlKHNlbGYsIGlzX2EpOgogICAgICAgIGEsIGIgPSBzZWxmLl9zZXRfb3BlcmFuZHMoaXNfYSkKICAgICAgICBpZiBhID4gYjoKICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICByYWlzZSBOb3RCb2xzaGVFcnJvcgoKICAgIGRlZiByYXZubyhzZWxmLCBpc19hKToKICAgICAgICBhLCBiID0gc2VsZi5fc2V0X29wZXJhbmRzKGlzX2EpCiAgICAgICAgaWYgYSA9PSBiOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHNlbGYuYm9sc2hlKGlzX2EpCgogICAgZGVmIG1lbnNoZShzZWxmLCBpc19hKToKICAgICAgICAnJydXcmFwcGVyIG92ZXIgYm9sc2hlIGFuZCByYXZubyBtZXRob2RzIGZvciB1c2VyIGNvbnZlbmllbmNlLicnJwogICAgICAgIGlzX3Jhdm5vID0gRmFsc2UKICAgICAgICB0cnk6CiAgICAgICAgICAgIGlzX3Jhdm5vID0gc2VsZi5yYXZubyhpc19hKQogICAgICAgIGV4Y2VwdCBOb3RCb2xzaGVFcnJvcjoKICAgICAgICAgICAgIyBTYWZlIHRvIHJldHVybiB0cnVlIHRoZXJlLgogICAgICAgICAgICByZXR1cm4gVHJ1ZQoKICAgICAgICBpZiBpc19yYXZubzoKICAgICAgICAgICAgIyBSZXR1cm4gTm90Qm9sc2hlRXJyb3Igc2luY2UgaXQgaXMgYWxzbyBhIGNhc2UuCiAgICAgICAgICAgIHJhaXNlIE5vdEJvbHNoZUVycm9yCiAgICAgICAgcmV0dXJuIFRydWUKCgpwcmludChCb2xzaGVNZW5zaGVyKDYsIDQpKQo=