import readline class RomanNumeralConverter: def __init__(self): self.valid_numerals = "IVXCM" self.values = {"I": 1, "V": 5, "X": 10, "C": 100, "M": 1000} def convert_to_number(self, numerals: str) -> str: filtered = self._filter_valid_numerals(numerals) if not filtered: return "ERROR: Invalid input" values = self._convert_numerals_to_values(filtered) return self._format_output(filtered, values) def _filter_valid_numerals(self, numerals: str) -> str: """Extract only valid Roman numerals from input.""" filtered_chars = [ char for char in numerals.upper() if char in self.valid_numerals ] return "".join(filtered_chars) def _convert_numerals_to_values(self, numerals: str) -> list[int]: """Convert Roman numeral characters to their integer values.""" values = [] for char in numerals: match char: case "I": values.append(1) case "V": values.append(5) case "X": values.append(10) case "C": values.append(100) case "M": values.append(1000) return values def _format_output(self, numerals: str, values: list[int]) -> str: """Format the conversion result for display.""" if len(values) == 1: return f"{numerals} = {values[0]}" else: values_str = " + ".join(str(v) for v in values) return f"{numerals} = {values_str} = {sum(values)}" def main(): converter = RomanNumeralConverter() while True: try: numerals = input("Please enter some Roman numerals: ") print(converter.convert_to_number(numerals)) except (EOFError, KeyboardInterrupt): break if __name__ == "__main__": main()