This is a project I'm working on for a class. I'm pretty new to CS and python...and I found that I am totally lost. I'm suppose to write a program to convert Roman numerals to arabic numbers. It is also suppose to handle invalid input.

Here is what I have so far:

def roman_converter():

    R=str.upper(raw_input("Enter a Roman numeral to convert to Arabic: "))

    d={'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}

    s=0
    for c in range(len(R)):
        while R[0]<R[1]:
            x=R[1]-R[0]
            s=s+x
        else:
            x=R[0]+R[1]
            s=s+x
        R=R[2:]
    else:
        return s

    print R, '=', s

roman_converter()

I'm getting all sorts of errors with this, and I don't know what to do about the handling of invalid input... help please!

Recommended Answers

All 2 Replies

Well, there's two types of validation... you'll need to first verify that the numerals are in the right order, ie, you can't have IC or something, but you could have XC, or IX, but not VX or IL, etc. That's one validation.

The other validation that you would need is to make sure that ONLY characters used for roman numerals are input. If you're just working with I,V,X,L,C,D,and M, then any other character is invalid.

Does that make sense?

You might start with code tags (use the "#" icon) and then explain what the program you posted does, as it doesn't appear to make sense. Once you reach this line
while R[0]<R[1]:
it appears to be an infinite loop, but it's difficult to tell without proper indents.

Basically, you want
1) the dictionary that you have named "d" and
2) test that all input letters are in the dictionary, with a test:
3) if the value of this letter is less than the value of the next letter then subtract the value. Otherwise, add the value. Post some code with comments as to what it does if you want more help.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.