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写入CSV文件的方法
Jul 08 Python
Numpy数组的保存与读取方法
Apr 04 Python
django启动uwsgi报错的解决方法
Apr 08 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
浅谈django的render函数的参数问题
Oct 16 Python
python pytest进阶之conftest.py详解
Jun 27 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
python根据时间获取周数代码实例
Sep 30 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
Mar 05 Python
python 镜像环境搭建总结
Sep 23 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
第一节--面向对象编程
2006/11/16 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
提高PHP编程效率的方法
2013/11/07 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
PHP解决中文乱码
2017/04/28 PHP
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
可以用鼠标拖动的DIV实现思路及代码
2013/10/21 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
vue生成随机验证码的示例代码
2017/09/29 Javascript
js module大战
2019/04/19 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Python基于回溯法子集树模板解决找零问题示例
2017/09/11 Python
Python多进程原理与用法分析
2018/08/21 Python
django的csrf实现过程详解
2019/07/26 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
python如何快速生成时间戳
2020/07/21 Python
python 提高开发效率的5个小技巧
2020/10/19 Python
几道数据库的概念性面试题
2014/05/30 面试题
金融事务专业求职信
2014/04/25 职场文书
会计求职自荐信
2014/06/20 职场文书
农业项目投资意向书
2015/05/09 职场文书
当你焦虑迷茫时,请读读这6句话
2019/07/24 职场文书