我正在通过 Dive to Python 学习Python 2.7。以下是“罗马数字与阿拉伯数字之间的转换”代码:
romanNumeralMap = (('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))
def toRoman(n):
result = ""
for numeral, integer in romanNumeralMap:
while n >= integer:
result += numeral
n -= integer
return result
def fromRoman(s):
result = 0
index = 0
for numeral, integer in romanNumeralMap:
while s[index:index+len(numeral)] == numeral:
result += integer
index += len(numeral)
return result
print toRoman(1356)
print fromRoman('MCMLXXII')
但我对这一部分的程序感到困惑:
for numeral, integer in romanNumeralMap:
while s[index:index+len(numeral)] == numeral:
result += integer
index += len(numeral)
在秒时间执行时,s[index:index+len(numeral)]
会返回CM
,但我认为它应该返回C
,因为index = 1
之后第一次执行,然后是index+len(numeral) = 2
和s[1: 2] = 'C'
。我的理解有什么问题?
答案 0 :(得分:0)
在for
循环的第二次迭代中,index
确实是1
numeral
为CM
,integer
为900
len(numeral)
== 2
和
s[1:1+2]
== S[1:3]
== 'CM'
答案 1 :(得分:0)
numeral
等于CM
和len(cm) == 2
。 s[1: 1 + 2] == s[1:3] == 'CM'
由于数字实际上是两个字符,因此您可以读取输入的两个字符以匹配。