How to convert an integer into a roman numeral?

207 Views Asked by At

I'm having trouble to make an integer into roman numeral for having an ouptut of integer with square brackets (I'm pretty sure it's a list, but what I want is to have an integer) and I couldn't find solution why I'm having 'None' on 'rom' value. I'm using python3.

roman.py

#!/usr/bin/env python3

import sys

def numToRom(number):
    rom = ["", "I", "III", "IV", "V", "VI", "VII", "VIII", "IX"]

    if number in range(0, 9):
       result = rom[number]
       return result

num = sys.argv[1:]
rom = numToRom(num)
print(num, " is ", rom)

$ ./roman.py 2

Old output:

['2'] is None

Desired output:

2 is II
2

There are 2 best solutions below

0
On BEST ANSWER

Your problem stems from the fact that you're passing a list with a character inside to your function. And that function expects an integer (if number in range(0, 9)), so you need to convert it to the right integer.

import sys

def numToRom(number):
    if type(number) is list: # If you know your number might be a list with only one str(value)
        number = int(number[0])
    
    rom = ["", "I", "III", "IV", "V", "VI", "VII", "VIII", "IX"]

    if number in range(0, 9):
       result = rom[number]
       return result

That will work specifically for your use case, if number is of the form ['{some digit}]. If you want to get fancier, you could use recursion to return a list with the roman number of each number in a list, like so:

def numToRom(number):
    if type(number) is list:
        rom = []
        for value in number:
            rom.append(numToRom(int(value)))
        return rom
    else:
        rom = ["", "I", "III", "IV", "V", "VI", "VII", "VIII", "IX"]
    
        if number in range(0, 9):
           result = rom[number]
           return result

>>> num = ['2', '3', '5']
>>> numToRom(num)
    ['2', '3', '5']  is  ['III', 'IV', 'VI']

Note that this function works even if the values inside the input list are not characters, but normal integers.

>>> num = [2, 3, 5]
>>> rom = numToRom(num)
    [2, 3, 5]  is  ['III', 'IV', 'VI']
0
On
  • pip install roman
import roman
print(roman.toRoman(int(input())))