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使用metaclass实现Singleton模式的方法
May 05 Python
在Django的视图中使用form对象的方法
Jul 18 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
Python合并字典键值并去除重复元素的实例
Dec 18 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
python系列 文件操作的代码
Oct 06 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
Python实现新型冠状病毒传播模型及预测代码实例
Feb 05 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 进程锁定问题分析研究
2009/11/24 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
ThinkPHP页面跳转success与error方法概述
2014/06/25 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
可以把编码转换成 gb2312编码lib.UTF8toGB2312.js
2007/08/21 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
Javascript循环删除数组中元素的几种方法示例
2017/05/18 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
Python字典操作简明总结
2015/04/13 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
python实现浪漫的烟花秀
2019/01/30 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
pandas 层次化索引的实现方法
2019/07/06 Python
简单了解python的一些位运算技巧
2019/07/13 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
开发人员所需要知道的HTML5性能分析面面观
2012/07/05 HTML / CSS
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
优秀德育工作者事迹材料
2014/05/07 职场文书
学校献爱心活动总结
2014/07/08 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers
GO中sync包自由控制并发示例详解
2022/08/05 Golang