如何用PYTHON解决罗马数字转整数问题
1、打开JUPYTER NOTEBOOK,新建一个PY文档。

2、I = 1
I + I
我们可以定义变量,但是数据多的时候不现实。

3、d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
s = "II"
result = 0
for i in s:
result = result + d[i]
print(result)
我们先定义一个字典,然后逐个相加。

4、s = "XXVII"
result = 0
for i in s:
result = result + d[i]
print(result)
s = "IV"
result = 0
for i in s:
result = result + d[i]
print(result)
但是IV这里是错误的,这是罗马数字的特点。

5、s = "IV"
result = 0
d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
if s == "IV":
print(4)
elif s == "IX":
print(9)
elif s == "XL":
print(40)
elif s == "XC":
print(90)
elif s == "CD":
print(400)
elif s == "CM":
print(900)
else:
for i in s:
result = result + d[i]
print(result)
这些就是特殊的时候,但是这样写很复杂。

6、s = "MCMXCIV"
#M = 1000, CM = 900, XC = 90 and IV = 4
#1994
result = 0
d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
dd = {"IV": 4, "IX": 9, "XL": 40, "XC": 90, "CD": 400, "CM": 900}
if s in dd:
print(dd[s])
else:
for i in s:
print(i,end=" ")
result = result + d[i]
print(result)
查看一下,再设置多一个字典,但是会遇到遍历重复的问题。

7、s = "MCMXCIV"
#M = 1000, CM = 900, XC = 90 and IV = 4
#1994
result = 0
d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
dd = {"IV": 4, "IX": 9, "XL": 40, "XC": 90, "CD": 400, "CM": 900}
for i in range(len(s)):
if s[i:i+2] in dd:
result = result + dd[s[i:i+2]]
s = s.strip(s[i:i+2])
else:
result = result + d[s[i]]
print(result)
可能会有同学觉得可以减去不要的字符串,但是遍历的i还是会按照顺序遍历的,所以不可行。

8、s = "MCMXCIV"
d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
result = 0
for i in range(len(s)):
if i < (len(s)-1) and d[s[i]] < d[s[i+1]]:
result = result - d[s[i]]
else:
result = result + d[s[i]]
print(result)
其实只要左边的数字比右边的小,那就减去左边的小的数字就可以了。

9、s = "MCMXCIV"
#M = 1000, CM = 900, XC = 90 and IV = 4
#1994
result = 0
d = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
dd = ["IV", "IX", "XL", "XC", "CD", "CM"]
for i in range(len(s)):
if s[i:i+2] in dd:
result -= d[s[i]]
else:
result += d[s[i]]
print(result)
也可以设置多个列表方便理解,但是会相对比较缓慢。
