首页 > 解决方案 > 如何将整数转换为罗马数字?

问题描述

我很难将整数转换为罗马数字,因为有一个带方括号的整数输出(我很确定这是一个列表,但我想要的是一个整数),我找不到解决方案为什么我'在'rom'值上'没有'。我正在使用python3。

罗马书

#!/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

标签: python-3.xlistroman-numerals

解决方案


您的问题源于您将一个带有字符的列表传递给您的函数。该函数需要一个整数 ( 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 = ["", "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']

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

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

推荐阅读