Python 转换罗马数字
我必须创建一个程序,将罗马数字转换为十进制,但不使用循环。我现在写了这个程序,但它会给我错误Python 转换罗马数字,python,python-3.x,Python,Python 3.x,我必须创建一个程序,将罗马数字转换为十进制,但不使用循环。我现在写了这个程序,但它会给我错误 def translate(mdg): values = {"i":1, "v":5, "x":10, "D":500, "c":100, "m":1000} return sum(map(lambda x: values[x], mdg)) ch = input("Entrez un nombre romain en utilisant les lettres M, D, C, X,
def translate(mdg):
values = {"i":1, "v":5, "x":10, "D":500, "c":100, "m":1000}
return sum(map(lambda x: values[x], mdg))
ch = input("Entrez un nombre romain en utilisant les lettres M, D, C, X, I:")
print(translate(ch))
请注意,使用的字母格式与您在值字典中输入的字母格式相同,因此除D外,所有字母均为小写
一个好的解决方案是将大写的“D”替换为“D”,并将ch.lower()传递给translate函数。这里是一个经过适当修改的版本
- 对输入调用.lower()
- 做一些基本的错误处理,只允许dict中的数字作为输入
- 增加了正确计算数字的行为,如IX到9,而不是11
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))
value={“i”:1,“v”:5,“x”:10,“d”:500,“c”:100,“m”:1000}
mdg=输入(“在M、D、C、X、I的使用中使用名称和名称:”)
mdg=mdg.lower()
#小错误检查。确保每个mdg字符都在values dict中
尽管如此:
尝试:
##检查前缀号并将其双重删除
##(它们是加的而不是减的)
##总计(im)=999,但添加(im)=1001
smallerPrior=[值[mdg[x]]你能告诉我你遇到了什么错误以及输入了什么吗?你有小写字母,你输入的是大写字母。确保你的大小写与你在字典中查找的内容相匹配。这种简单的方法不起作用。像IV
或MCM
这样的数字呢?谢谢大家,是大写字母引起了我们的注意由于Python 2会出现问题raw_input
。我们必须确保OP实际使用的是Python 2,因为Python 3中不存在raw_input
,它只是输入。最有可能出现的错误也不是由于输入。不过,您提到大小写的方法是正确的。名称为“raw_input”没有定义这是我的错误getting@James您很可能正在使用Python3。请坚持使用Python3中不存在的input
raw\u input
。谢谢大家,问题出在大写字母上