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爬虫之HTTP异常处理
Nov 05 Python
Python中利用sorted()函数排序的简单教程
Apr 27 Python
解决Python传递中文参数的问题
Aug 04 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
Python面向对象程序设计类的多态用法详解
Apr 12 Python
python创建ArcGIS shape文件的实现
Dec 06 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
Python Sqlalchemy如何实现select for update
Oct 12 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 Python
Python下opencv库的安装过程及问题汇总
Jun 11 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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
PHP动态柱状图实现方法
2015/03/30 PHP
标准版Eclipse搭建PHP环境的详细步骤
2015/11/18 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
简介JavaScript中Boolean.toSource()方法的使用
2015/06/05 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
vue如何获取自定义元素属性参数值的方法
2019/05/14 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
微信小程序点击view动态添加样式过程解析
2020/01/21 Javascript
jquery实现拖拽小方块效果
2020/12/10 jQuery
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
Python 操作MySQL详解及实例
2017/04/30 Python
Python排序算法实例代码
2017/08/10 Python
Python3中的列表,元组,字典,字符串相关知识小结
2017/11/10 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
python修改文件内容的3种方法详解
2019/11/15 Python
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
优秀生推荐信范文
2013/11/28 职场文书
销售人员获奖感言
2014/02/05 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL