[Tutor] roman to arabic

Alan Gauld alan.gauld at btinternet.com
Mon Feb 27 02:45:03 CET 2012

On 26/02/12 23:29, Sukhpreet Sdhu wrote:

> import string

Are you using a very old versioon opf python?
If not you should not use string.
The built in string methods can do everything you
want without resorting to string.

> print "Welcome to the numeric conversion program"
> print "Please enter command"
> data=raw_input()
> now = 0
> previous = 0
> total = 0
> if data == "r":
>      print "Enter roman numeric to convert in arabic"
>      roman_numeric=string.swapcase(raw_input("Enter the Roman Numeral to convert to arabic"))

Are you sure you want swapcase()? I'd have thought uppercase()
would be more effective given the tests below.

Using built in methods that line becomes:

roman_numeric=raw_input("Enter the Roman Numeral to convert to 

>   if roman_numeric == ("M" or "D" or "L" or "C" or "L" or "X" or "V" or "I"):

This is just wrong!
The parenthesised list will evaluate to True so you are testing  if the 
variable is True, which it will be if not empty.

You want:

if roman_numeric in ("M","D","L","C","L","X","V","I"):

>       Length = len(roman_numeric) - 1

If the variable is one of the items in your list it is only 1 char long 
so you re setting Length to zero. Is that what you want?

>       i = roman_numeric[Length]

If you really want to extract the last digit use a -1 index.
In which case you dshould do the same for the check on valid values...

>       if i == "M":
>           now = 1000
>           if i == "D":
>               now = 500

Are you sure you want this structure?
It would look a lot neater using elif

        if i == "M":
            now = 1000
        elif i == "D":
            now = 500
        elif i == "C":
             now = 100

But better still would be to use a dictionary:

values = { 'I':1, 'V':5, 'X':10,...'D':500, 'M':1000 }

now = values[i]

>                                   acc = now
>                                   if (previous>= now):
>                                       total += acc-prvious

spelling error in prvious

>                                       print "The total is",total
>                                       if (previous<= now):
>                                           total += acc-prevous
>                                           print "The total is",total
>                                           else :

This else doesn't line up with any if.

 >                                               if data == "a" :

    if <cond>:

could just be

elif <cond>:


Alan G
Author of the Learn to Program web site

More information about the Tutor mailing list