如何将整数转换为罗马数字?

问题描述

我无法将整数转换为罗马数字,因为它有一个带方括号的整数输出(我很确定它是一个列表,但我想要的是一个整数),我找不到解决为什么我在 'rom' 值上有 'None' 的原因。 我用的是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

输出

['2'] is None

所需的输出

2 is II

解决方法

您的问题源于您将一个包含字符的列表传递给您的函数。该函数需要一个整数 (if number in range(0,9)),因此您需要将其转换为正确的整数。

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

如果 number 的形式为 ['{some digit}],这将特别适用于您的用例。如果你想变得更漂亮,你可以使用递归返回一个列表,其中包含列表中每个数字的罗马数字,如下所示:

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

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

请注意,即使输入列表中的值不是字符,而是普通整数,此函数也能工作。

>>> num = [2,3,5]
>>> rom = numToRom(num)
    [2,5]  is  ['III','VI']
,
  • pip 安装罗马
import roman
print(roman.toRoman(int(input())))