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字符遍历的艺术
Sep 06 Python
python读写ini文件示例(python读写文件)
Mar 25 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
Feb 14 Python
Python温度转换实例分析
Jan 17 Python
Python中str.join()简单用法示例
Mar 20 Python
Python3 实现随机生成一组不重复数并按行写入文件
Apr 09 Python
Python使用pickle模块储存对象操作示例
Aug 15 Python
python3.7.0的安装步骤
Aug 27 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
python 追踪except信息方式
Apr 25 Python
Python CSS选择器爬取京东网商品信息过程解析
Jun 01 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
关于时间计算的结总
2006/12/06 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
JS无限级导航菜单实现方法
2019/01/05 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
python获取当前时间对应unix时间戳的方法
2015/05/15 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
基于python 爬虫爬到含空格的url的处理方法
2018/05/11 Python
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
入党申请人的自我鉴定
2013/12/01 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
采购主管岗位职责
2014/02/01 职场文书
电大毕业自我鉴定
2014/02/03 职场文书
企业内控岗位的职责
2014/02/07 职场文书
学校社会实践活动总结
2014/07/03 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
羊脂球读书笔记
2015/06/30 职场文书
公司员工离职感言
2015/08/03 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
Python中requests做接口测试的方法
2021/05/30 Python