Python 3.5中的罗马/数字转换

时间:2016-12-11 00:49:34

标签: python

我正在尝试通过整数到罗马数字转换练习,这似乎是新python编码器的通过仪式。我似乎已成功将整数写入罗马数字部分,但我无法将罗马数字转换为整数才能正常工作。换句话说,当用户键入“1999”时,输出成功“MCMXCIX”;但是当用户键入“MCMXCIX”时,输出是错误:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module> rom_to_int(MCMXCIX)
NameError: name 'MCMXCIX' is not defined".

到目前为止,这是我的代码:

def int_to_rom (integer):
    returnstring=''
    table=[['M',1000],['CM',900],['D',500],['CD',400],['C',100],['XC',90],['L',50],['XL',40],['X',10],['IX',9],['V',5],['IV',4],['I',1]]

    for pair in table:

        while integer-pair[1]>=0:

            integer-=pair[1]
            returnstring+=pair[0]

    return returnstring

def rom_to_int (string):
    returnint=0
    table=[['M',1000],['CM',900],['D',500],['CD',400],['C',100],['XC',90],['L',50],['XL',40],['X',10],['IX',9],['V',5],['IV',4],['I',1]]

    for pair in table:

        continueyes=True

        while continueyes:
            if len(string)>=len(pair[0]):

                if string[0:len(pair[0])]==pair[0]:
                    returnint+=pair[1]
                    string=string[len(pair[0]):]

                else: continueyes=False
            else: continueyes=False

    return returnint

我已经到了一半,需要帮助排除故障。任何人都可以看到第二部分有什么问题吗?我查看了其他代码,但它们似乎是针对Python 2或其他编码语言。我还了解到有一个python转换器现在很容易做到这一点(import roman,roman.toRoman(myInt)),但我正在尝试编写函数。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您获得的错误与您的代码无关。

rom_to_int(MCMXCIX)

但由于MCMXCIX周围没有引号,因此将其作为(未定义的)变量并抛出您看到的错误。