I want to make a Roman number converter to Arabic numbers, by giving list's of wrong Roman numbers. Is there any other validation issue in my code? Or perhaps a i am missing something? It should avoid every wrong possible input, and just print out the valid ones.
user_input: str = input('Type a Roman Number: ').upper()
arabic_nums: list = []
result: int = 0
not_allowed: list = [
'LL', 'VV', 'DD', 'MMMM', 'IIII', 'CCCC', 'XXXX',
'IIX', 'IXC', 'IVI', 'IL', 'IC', 'ID', 'IM', 'IXX', 'IXV', 'IXL', 'IIV', 'IXI', 'IVV',
'VIX', 'VX', 'VL', 'VC', 'VD', 'VM', 'VIV',
'XCM', 'XCD', 'XCX', 'XD', 'XM', 'XLX', 'XCC', 'XCL', 'XXL', 'XXC',
'LXC', 'LC', 'LD', 'LM', 'LXL',
'CMD', 'CCM', 'CMC', 'CDC', 'CMM', 'CCD',
'DM', 'DCM', 'DCD',
]
valid_romans: list = [
'I', 'V', 'X', 'L', 'C', 'D', 'M',
]
for i in range(len(not_allowed)):
while not_allowed[i] in user_input:
print('Wrong Input !')
user_input = input('Type a Roman Number: ').upper()
for i in range(len(user_input)):
while user_input[i] not in valid_romans:
print('Wrong Input !')
user_input = input('Type a Roman Number: ').upper()
roman_numerals: dict = {
'I': 1,
'V': 5,
'X': 10,
'L': 50,
'C': 100,
'D': 500,
'M': 1000,
}
for element in user_input:
arabic_nums.append(roman_numerals[element])
i: int = 0
while i < len(arabic_nums) - 1:
if arabic_nums[i] < arabic_nums[i + 1]:
result += arabic_nums[i + 1] - arabic_nums[i]
i += 2
else:
result += arabic_nums[i]
i += 1
if i == len(arabic_nums) - 1:
result += arabic_nums[i]
if result >= 4000:
print('Over 4000, not correct !')
elif result < 4000:
print(f'Roman Numbers: {user_input} = {result}')
print('End of code lines.')