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程序的循环的运行效率的原因
Apr 01 Python
Python内置数据结构与操作符的练习题集锦
Jul 01 Python
python读取oracle函数返回值
Jul 18 Python
python数据类型判断type与isinstance的区别实例解析
Oct 31 Python
Python代码缩进和测试模块示例详解
May 07 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
Python K最近邻从原理到实现的方法
Aug 15 Python
Python Subprocess模块原理及实例
Aug 26 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
Dec 08 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统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
php简单smarty入门程序实例
2015/06/11 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
JQuery Tab选项卡效果代码改进版
2010/04/01 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
让你彻底掌握es6 Promise的八段代码
2017/07/26 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
Python简单网络编程示例【客户端与服务端】
2017/05/26 Python
pandas值替换方法
2018/07/10 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
小学数学教学反思
2014/02/02 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
原料仓仓管员岗位职责
2014/07/08 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
中层干部考核评语
2015/01/04 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
团干部培训班心得体会
2016/01/06 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript