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连接池实现示例程序
Nov 26 Python
python实现字符串和日期相互转换的方法
May 13 Python
十条建议帮你提高Python编程效率
Feb 16 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
Python常见内置高效率函数用法示例
Jul 31 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
python中wheel的用法整理
Jun 15 Python
为什么称python为胶水语言
Jun 16 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 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
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php数据库密码的找回的步骤
2011/01/12 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
两种php实现图片上传的方法
2016/01/22 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
一端时间轮换的广告
2006/06/26 Javascript
自动更新作用
2006/10/08 Javascript
js几个不错的函数 $$()
2006/10/09 Javascript
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
判断一个对象是否为jquery对象的方法
2014/03/12 Javascript
js只执行1次的函数示例
2016/07/20 Javascript
利用ES6语法重构React组件详解
2017/03/02 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
react实现点击选中的li高亮的示例代码
2018/05/24 Javascript
基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能
2019/04/02 Javascript
python实现计算资源图标crc值的方法
2014/10/05 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
Python 日期与时间转换的方法
2020/08/01 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
中式面点餐厅创业计划书
2014/01/29 职场文书
2016年会开场白台词
2015/06/01 职场文书
三国演义读书笔记
2015/06/25 职场文书
消防安全培训工作总结
2015/10/23 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
SQL语句多表联合查询的方法示例
2022/04/18 MySQL