Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 转换罗马数字_Python_Python 3.x - Fatal编程技术网

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
我在Python3.4上测试了这一点,同样的代码也在Python2.7上运行(使用原始输入而不是输入)。希望有帮助

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
。谢谢大家,问题出在大写字母上