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实现将绝对URL替换成相对URL的方法
Jun 28 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
flask框架使用orm连接数据库的方法示例
Jul 16 Python
深入了解Python iter() 方法的用法
Jul 11 Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
对Python 中矩阵或者数组相减的法则详解
Aug 26 Python
python 最简单的实现适配器设计模式的示例
Jun 30 Python
python 使用elasticsearch 实现翻页的三种方式
Jul 31 Python
Python getattr()函数使用方法代码实例
Aug 10 Python
Pygame Draw绘图函数的具体使用
Nov 17 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 数组使用详解 推荐
2011/06/02 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
php流量统计功能的实现代码
2012/09/29 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
smarty模板引擎中变量及变量修饰器用法实例
2015/01/22 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
Laravel实现表单提交
2017/05/07 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
js 内存释放问题
2010/04/25 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
js判断节假日实例代码
2017/12/27 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
python+mysql实现教务管理系统
2019/02/20 Python
基于Python的PIL库学习详解
2019/05/10 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
HTML5打开手机扫码功能及优缺点
2017/11/27 HTML / CSS
苏宁红孩子母婴商城:redbaby
2017/02/12 全球购物
开办饭店创业计划书
2013/12/28 职场文书
蛋糕店的商业计划书范文
2014/01/27 职场文书
学校安全教育制度
2014/01/31 职场文书
公司离职证明样本
2014/09/13 职场文书
2015年平安创建工作总结
2015/04/29 职场文书
四大名著读书笔记
2015/06/25 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书