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 解析html之BeautifulSoup
Jul 07 Python
python web框架学习笔记
May 03 Python
Python遍历目录中的所有文件的方法
Jul 08 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
Jan 05 Python
python区分不同数据类型的方法
Oct 14 Python
python中with用法讲解
Feb 07 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
Python实现aes加密解密多种方法解析
May 15 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
python使用XPath解析数据爬取起点小说网数据
Apr 22 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读写文件的方法(生成HTML)
2006/11/27 PHP
PHP配置文件中最常用四个ini函数
2007/03/19 PHP
php中的MVC模式运用技巧
2007/05/03 PHP
PHP下通过file_get_contents的代理使用方法
2011/02/16 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
PHP计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
jsTree使用记录实例
2016/12/01 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
vue的全局变量和全局拦截请求器的示例代码
2018/09/13 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
[38:31]完美世界DOTA2联赛PWL S3 Magma vs GXR 第一场 12.13
2020/12/17 DOTA
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
销售经理竞聘书
2014/03/31 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技