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中使用hashlib模块处理算法的教程
Apr 28 Python
Python OS模块常用函数说明
May 23 Python
Python正则表达式经典入门教程
May 22 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
Python实现的各种常见分布算法示例
Dec 13 Python
Python使用folium excel绘制point
Jan 03 Python
对python过滤器和lambda函数的用法详解
Jan 21 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
python内打印变量之%和f的实例
Feb 19 Python
Django限制API访问频率常用方法解析
Oct 12 Python
利用python清除移动硬盘中的临时文件
Oct 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中的正规表达式(二)
2006/10/09 PHP
解析php中两种缩放图片的函数,为图片添加水印
2013/06/14 PHP
php日历制作代码分享
2014/01/20 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
PHP实现微信发红包程序
2015/08/24 PHP
php将文件夹打包成zip文件的简单实现方法
2016/10/04 PHP
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
JS实现淘宝幻灯片效果的实现方法
2013/03/22 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
javascript中CheckBox全选终极方案
2015/05/20 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
详解Node.js 命令行程序开发教程
2017/06/07 Javascript
通过示例彻底搞懂js闭包
2017/08/10 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
JS实现的简单分页功能示例
2018/08/23 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
JavaScript中如何对多维数组(矩阵)去重的实现
2019/12/04 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
Python针对给定字符串求解所有子序列是否为回文序列的方法
2018/04/21 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
django项目中新增app的2种实现方法
2020/04/01 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
Python代码需要缩进吗
2020/07/01 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
蛋糕店的商业计划书范文
2014/01/27 职场文书
岗位职责说明书模板
2014/07/30 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang