viligen

integer_cls

Mar 9th, 2022
779
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.11 KB | None | 0 0
  1. class Integer:
  2.     def __init__(self, value):
  3.         self.value = value
  4.  
  5.     @classmethod
  6.     def from_float(cls, float_value):
  7.         try:
  8.             return cls(int(float_value))
  9.         except ValueError:
  10.             return "value is not a float"
  11.  
  12.     @classmethod
  13.     def from_roman(cls, value):
  14.         return cls(cls.roman_numeral_to_decimal(value))
  15.  
  16.     @classmethod
  17.     def from_string(cls, value):
  18.         if not isinstance(value, str):
  19.             return 'wrong type'
  20.         try:
  21.             return cls(int(value))
  22.         except ValueError:
  23.             return 'wrong type'
  24.  
  25.     @staticmethod
  26.     def roman_numeral_to_decimal(roman_numeral):
  27.         tallies = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
  28.  
  29.         number = 0
  30.         for i in range(len(roman_numeral) - 1):
  31.             left = roman_numeral[i]
  32.             right = roman_numeral[i + 1]
  33.             if tallies[left] < tallies[right]:
  34.                 number -= tallies[left]
  35.             else:
  36.                 number += tallies[left]
  37.         number += tallies[roman_numeral[-1]]
  38.         return number
  39.  
  40.  
  41.  
  42.  
Advertisement
Add Comment
Please, Sign In to add comment