从Dive to Python中的罗马数字转换似乎会输出一个额外的字符

从Dive to Python中的罗马数字转换似乎会输出一个额外的字符,python,arrays,roman-numerals,Python,Arrays,Roman Numerals,我正在通过深入学习Python学习Python 2.7。以下是“罗马数字和阿拉伯数字之间的转换”代码: 但我对这部分的程序感到困惑: for numeral, integer in romanNumeralMap: while s[index:index+len(numeral)] == numeral: result += integer index += len(numeral) 在第二次执行时,s[index:index+l

我正在通过深入学习Python学习Python 2.7。以下是“罗马数字和阿拉伯数字之间的转换”代码:

但我对这部分的程序感到困惑:

for numeral, integer in romanNumeralMap:
        while s[index:index+len(numeral)] == numeral:
            result += integer
            index += len(numeral)

在第二次执行时,
s[index:index+len(numeric)]
返回
CM
,但我认为它应该返回
C
,因为第一次执行后
index=1
,然后
index+len(numeric)=2
,并且
s[1:2]='C'
。我的理解有什么问题?

for
循环的第二次迭代中,
索引实际上是
1

数字
CM
整数
900

len(数字)
==
2
,以及


s[1:1+2]
=
s[1:3]
=
'CM'
数字
等于
CM
len(CM)==2
<代码>s[1:1+2]==s[1:3]==CM'


因为数字实际上是两个字符,所以您需要读取输入的两个字符来匹配。

如果我在(C,100)后面写上(CM,900),那么结果将是C?更值得一提的是,while过程是否遵循它所检查的元素的特定顺序?您是否知道CM与MC在罗马数字中有所不同?现在,关于while过程,它检查地图的顺序与给定的顺序一致,这是因为周围的
for
循环。@UlrichEckhardt我知道它们之间的区别。你是说while程序中的元素顺序决定while检查顺序吗?我认为你应该逐步完成这个程序,检查在某些阶段包含哪些变量,这将立即解决你的问题。
for numeral, integer in romanNumeralMap:
        while s[index:index+len(numeral)] == numeral:
            result += integer
            index += len(numeral)