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之配置日志的几种方式
May 22 Python
python如何读写csv数据
Mar 21 Python
Python基于opencv的图像压缩算法实例分析
May 03 Python
python代码过长的换行方法
Jul 19 Python
python3 map函数和filter函数详解
Aug 26 Python
python 实现Flask中返回图片流给前端展示
Jan 09 Python
NumPy统计函数的实现方法
Jan 21 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
python3爬虫中异步协程的用法
Jul 10 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 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 5.4 你必须要知道的
2013/08/07 PHP
php实现paypal 授权登录
2015/05/28 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
Vue.js2.0中的变化小结
2017/10/24 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
JavaScript简易计算器制作
2020/01/17 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
Python发送邮件测试报告操作实例详解
2018/12/08 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
pycharm的console输入实现换行的方法
2019/01/16 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
Python之Numpy的超实用基础详细教程
2019/10/23 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
Html5移动端div固定到底部实现底部导航条的几种方式
2021/03/09 HTML / CSS
JDO的含义
2012/11/17 面试题
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
办公室文书岗位职责
2013/12/16 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
企业安全生产标语
2014/06/06 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
武夷山导游词
2015/02/03 职场文书
英语教师个人总结
2015/02/09 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
python中的sys模块和os模块
2022/03/20 Python
Three.js实现雪糕地球的使用示例详解
2022/07/07 Javascript