0

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.')

0 Answers0