罗马到数字的转换程序 python

import re, itertools

def fromroman(RomanChar):
 Pattern = "^(M{0,3})(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$"
 CharList = list(re.search(Pattern, RomanChar).groups())
 return int(reduce(lambda X,Y: X + Y,
                map(mapNum, itertools.izip(CharList, [1000, 100, 10, 1]))))

def cmpfun(x, y):
 StrSeq = "IVXLCDM"
 if StrSeq.index(x) < StrSeq.index(y):
  return 1
 elif StrSeq.index(x) > StrSeq.index(y):
  return -1
 return 0

def mapNum((StrNum, Level)):
 if StrNum == "":
   return "0"
 Dict = {1   :{'I':1, 'V':5, 'X':10},
      10  :{'X':1, 'L':5, 'C':10},
      100 :{'C':1, 'D':5, 'M':10},
      1000:{'M':1}}
 CharDict = Dict[Level]
 MaxChr = sorted(StrNum, cmpfun)[0]
 AddList = map(lambda x: CharDict[x], list(StrNum[StrNum.index(MaxChr):]))
 DelList = map(lambda x: CharDict[x], list(StrNum[:StrNum.index(MaxChr)]))
 return str(sum(AddList) - sum(DelList))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值