将罗马数字转换为十进制数字

时间:2015-11-01 02:24:24

标签: python python-3.x

我写了这段代码来转换罗马数字,所以对于大多数数字它的工作正常但是一旦我添加像IV它给我6而不是4或XIV它给我16而不是14因此我知道我有小问题但是我无法弄明白请帮忙!

def romaine_v1(mdg):
    values = {"I":1,"II":2,"III":3, "IV":4, "V":5, "X":10, "D":500, "C":100, "M":1000}
return sum(map(lambda x: values[x], mdg))

def romaine_v2(string):
    result = 0
    table = table=[['M',1000],['D',500],['C',100],['X',10],['V',5],['I',1]]
    for pairs in table:
        for letter, value in table:
        while string.startswith(letter):
            result += value
            string = string[len(pairs[0]):]
    return result


ch = input("Entrez un nombre romain en utilisant les lettres M, D, C, X et I:")


print(romaine_v1(ch))
print(romaine_v2(ch))

1 个答案:

答案 0 :(得分:1)

当您执行string.startswith并循环浏览table时,您首先会遇到I,而不是IV。这会导致您添加1.稍后(在下一次迭代中),您点击V并添加5.例如,MXM(1990),{{1}会发生同样的问题}(99),以及涉及字母反转的任何其他数字,表示“x小于y”。

解决方案是检查给定字符的数值是否小于下一个字符的值。