Python 3.5中的罗马/数字转换

Roman/Numeral Conversion in Python 3.5

我正在努力完成整数到罗马数字的转换练习,这似乎是新的Python编码人员的一个仪式。我似乎已经成功地将整数正确地写入了罗马数字部分,但我无法将罗马数字正确地写入整数。换句话说,当用户键入"1999"时,输出成功地为"mcmxcix";但是当用户键入"mcmxcix"时,输出错误:

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

这是迄今为止我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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

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


您得到的错误与您的代码无关。你有

1
rom_to_int(MCMXCIX)

但是,由于在MCMXCIX周围没有引号,所以它将成为一个(未定义的)变量,并抛出您看到的错误。