我写了这段代码来转换罗马数字,所以对于大多数数字它的工作正常但是一旦我添加像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))
答案 0 :(得分:1)
当您执行string.startswith
并循环浏览table
时,您首先会遇到I
,而不是IV
。这会导致您添加1.稍后(在下一次迭代中),您点击V
并添加5.例如,MXM
(1990),{{1}会发生同样的问题}(99),以及涉及字母反转的任何其他数字,表示“x小于y”。
解决方案是检查给定字符的数值是否小于下一个字符的值。