【发布时间】:2021-04-06 13:57:38
【问题描述】:
我正在尝试使用 python 将 ROMAN 数字转换为整数,但在编写此 for 循环时遇到了麻烦。我的CODE如下:
def romanToInt(s: str) -> int:
sarr = [x for x in s]
symbolBank = {
'I' : 1,
'V' : 5,
'X' : 10,
'L' : 50,
'C' : 100,
'D' : 500,
'M' : 1000
}
prefixBank = {
'I' : 1,
'X' : 10,
'C' : 100,
}
suffixBank = {
'V' : 5,
'X' : 10,
'L' : 50,
'C' : 100,
'D' : 500,
'M' : 1000
}
result = 0
for k in range(len(sarr) - 1):
print(k)
if (sarr[k] in prefixBank) and (sarr[k+1] in suffixBank):
value = suffixBank[sarr[k + 1]] - prefixBank[sarr[k]]
literal = sarr[k] + sarr[k + 1]
k += 1
else:
value = symbolBank[sarr[k]]
literal = sarr[k]
print('literal:', literal, 'value:', value)
result += value
if len(literal) < 2:
value = prefixBank[sarr[len(sarr) - 1]]
result += value
return result
上述程序的OUTPUT如下:
0
literal: M value: 1000
1
literal: CM value: 900
2
literal: M value: 1000
3
literal: XC value: 90
4
literal: C value: 100
5
literal: IV value: 4
3094
我想知道为什么k += 1 在if 语句中不起作用。
我的意思是问-为什么在CM和XC之后不跳过“文字”M和C
【问题讨论】:
-
你有一个前面的for语句
for k in range(len(sarr) - 1):,k的值是根据它之前的值更新的,for循环中的语句k += 1会更新K但它会立即返回到for 循环中的值 + 1,在下一次执行 for 语句时。 -
K 增加了,但是在循环的下一次迭代中,K 将再次设置为 range 中的下一个值。
标签: python arrays python-3.x algorithm