Python实现将罗马数字转换成普通阿拉伯数字的方法


Posted in Python onApril 19, 2017

本文实例讲述了Python实现将罗马数字转换成普通阿拉伯数字的方法。分享给大家供大家参考,具体如下:

罗马数字,我们在某些电视中或者现实生活中都曾经看到过,近日,学习Python时,也遇到了罗马数字的解说,于是顺便写了一个小程序来练习罗马数字到我们日常生活普通数字之间的转换的小函数。

首先,咱们了解一下,罗马数字的潜在法则,

在罗马数字中,利用7个不同字母进行重复或者组合来表达各式各样的数字。

I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000

其组合关系是:

上面的字符最多能同时连续的使用三次

比如:4,罗马数字就应该是IV,而不是IIII,超过三个组合时,就要使用低高组合,4就是I和V的组合,I表示1,V表示5

函数使用方法:

getRomanNum('MDCCCLXXXVIII')

就会获得1888

Python代码:

def getRomanNum(RomanStr):
 """Roman numerals will be converted into digital,RomanStr is a RomanString"""
   import re
   if re.search('^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$',RomanStr)!=None:
     NumDic = {"pattern":"","retNum":0}
     RomanPattern = {
       "0":('','','','M'),
       "1":('CM','CD','D','C',100),
       "2":('XC','XL','L','X',10),
       "3":('IX','IV','V','I',1)
       }
     i = 3
     NumItems = sorted(RomanPattern.items())
     for RomanItem in NumItems:
       if RomanItem[0] != '0':
         patstr = NumDic["pattern"].join(['',RomanItem[1][0]])
         if re.search(patstr,RomanStr) != None:
           NumDic["retNum"] += 9*RomanItem[1][4]
           NumDic["pattern"] = patstr
         else:
           patstr = NumDic["pattern"].join(['',RomanItem[1][1]])
           if re.search(patstr,RomanStr) != None:
             NumDic["retNum"] += 4*RomanItem[1][4]
             NumDic["pattern"] = patstr
           else:
             patstr = NumDic["pattern"].join(['',RomanItem[1][2]])
             if re.search(patstr,RomanStr) != None:
               NumDic["retNum"] += 5*RomanItem[1][4]
               NumDic["pattern"] = patstr
       if NumDic["pattern"] == '':
         NumDic["pattern"] = '^'
       tempstr = ''
       sum = 0
       for k in range(0,4):
         pstr = RomanItem[1][3].join(['','{']).join(['',str(k)]).join(['','}'])
         patstr = NumDic["pattern"].join(['',pstr])
         if re.search(patstr,RomanStr) != None:
           sum = k*(10**i)
           tempstr = patstr
       if tempstr <> '':
         NumDic["pattern"] = tempstr
       else:
         NumDic["pattern"] = patstr
       NumDic['retNum'] += sum
       i -= 1
     return NumDic['retNum']
   else:
     print 'String is not a valid Roman numerals'
Python 相关文章推荐
python 输出一个两行字符的变量
Feb 05 Python
Python with的用法
Aug 22 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
Python 专题四 文件基础知识
Mar 20 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
Aug 20 Python
python3 pathlib库Path类方法总结
Dec 26 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
Python reduce函数作用及实例解析
May 08 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
Python Http请求json解析库用法解析
Nov 28 Python
Python连接SQLServer2000的方法详解
Apr 19 #Python
Django自定义插件实现网站登录验证码功能
Apr 19 #Python
Python列表切片用法示例
Apr 19 #Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 #Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
Apr 18 #Python
浅析python递归函数和河内塔问题
Apr 18 #Python
Python使用正则表达式实现文本替换的方法
Apr 18 #Python
You might like
PHP新手上路(十四)
2006/10/09 PHP
由php if 想到的些问题
2008/03/22 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
js数组的操作详解
2013/03/27 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
JQuery fileupload插件实现文件上传功能
2016/03/18 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python通过线程实现定时器timer的方法
2015/03/16 Python
python将视频转换为全字符视频
2019/04/26 Python
CSS3实现多背景展示效果通过CSS3定位多张背景
2014/08/10 HTML / CSS
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
生产部主管岗位职责
2014/01/06 职场文书
法学院方阵解说词
2014/01/29 职场文书
保险经纪人求职信
2014/03/11 职场文书
高中学生期末评语
2014/04/25 职场文书
2014年基建工作总结
2014/12/12 职场文书
企业员工辞职信范文
2015/05/12 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
PHP新手指南
2021/04/01 PHP
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js