def romanToInt(s):
symbol= ['I','V','X','L','C','D','M']
value= [1,5,10,50,100,500,1000]
dic= {k:v for k,v in zip(symbol, value)}
sums=0
string= [i for i in range(len(s))]
for i in string:
if s[i] in ['I','X','C']:
left_index= list(dic.keys()).index(s[i])
next_symbol= list(dic.keys())[left_index + 1]
next2_symbol= list(dic.keys())[left_index + 2]
if i < len(s) and (s[i]== next_symbol or s[i]== next2_symbol):
sums+= dic[s[i+1]] -dic[s[i]]
string.remove(i)
string.remove(i+1)
elif i < len(s) and (s[i]!= next_symbol or s[i]!= next2_symbol):
sums+= dic[s[i]]
elif i== len(s):
sums+= dic[s[i]]
else:
sums+= dic[s[i]]
return sums
当我将一些罗马数字放在一起(例如 IV、IX、XL 等)时,我的代码出现一些问题,例如“MCMXCIV”,输出是 2216 而不是 1994。需要一些帮助
def romanToInt(s):
symbol = ['I', 'V', 'X', 'L', 'C', 'D', 'M']
value = [1, 5, 10, 50, 100, 500, 1000]
dic = {k: v for k, v in zip(symbol, value)}
sums = 0
i = 0
while i < len(s):
if i < len(s) - 1 and dic[s[i]] < dic[s[i + 1]]:
sums += dic[s[i + 1]] - dic[s[i]]
i += 2
else:
sums += dic[s[i]]
i += 1
return sums
使用 while 循环的正确版本