擅长:python、mysql、java
<p>这是一个经过适当修改的版本。在</p>
<ul>
<li>对输入调用.lower()。在</li>
<li>做一些基本的错误处理,只允许你的dict中的数字作为输入。在</li>
<li>添加了正确计算数字的行为,如将IX改为9而不是11。在</li>
</ul>
<p>我在Python3.4上测试了这个代码,同样的代码也在Python2.7上运行(使用原始输入而不是输入)。希望有帮助。在</p>
<pre><code>values = {"i":1, "v":5, "x":10, "d":500, "c":100, "m":1000}
mdg = input("Entrez un nombre romain en utilisant les lettres M, D, C, X, I:")
mdg = mdg.lower()
# small error check. make sure each mdg character is in values dict
while True:
try:
## check for prefix numbers and double remove them
## (they were added instead of subtracted)
## total(im) = 999, but naiveAdd(im) = 1001
smallerPrior = [values[mdg[x]]<values[mdg[x+1]] for x in \
range(len(mdg)-1)]
break
except KeyError:
mdg = input("use only M, D, C, X, I:")
mdg.lower()
pass
firstSum = sum(map(lambda x: values[x], mdg))
overCounted = sum(map(lambda n: -2*values[mdg[n]] if smallerPrior[n] \
else 0, range(len(smallerPrior))))
print("In Arabic numerals that is: " +str(firstSum+overCounted))
</code></pre>