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局域网ip扫描示例分享
Apr 03 Python
在Python中用split()方法分割字符串的使用介绍
May 20 Python
python中WSGI是什么,Python应用WSGI详解
Nov 24 Python
Python实现的网页截图功能【PyQt4与selenium组件】
Jul 12 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
python3实现斐波那契数列(4种方法)
Jul 15 Python
python实现小世界网络生成
Nov 21 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
DataFrame.groupby()所见的各种用法详解
Jun 14 Python
python爬虫使用scrapy注意事项
Nov 23 Python
用python删除文件夹中的重复图片(图片去重)
May 12 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
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
基于php冒泡排序算法的深入理解
2013/06/09 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
PHP二维数组去重算法
2016/12/17 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
Vue防止白屏添加首屏动画的实例
2019/10/31 Javascript
js实现三角形粒子运动
2020/09/22 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
Python 面向对象 成员的访问约束
2008/12/23 Python
python3.5仿微软计算器程序
2020/03/30 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python字符串Intern机制详解
2019/07/01 Python
Python如何调用JS文件中的函数
2019/08/16 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
Python面向对象原理与基础语法详解
2020/01/02 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
python跨文件使用全局变量的实现
2020/11/17 Python
python爬虫基础之urllib的使用
2020/12/31 Python
Python学习之time模块的基本使用
2021/01/17 Python
电气自动化自荐信
2013/10/10 职场文书
安全检查与奖惩制度
2014/01/23 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
英语教学课后反思
2016/02/15 职场文书
python tkinter实现定时关机
2021/04/21 Python
python中如何对多变量连续赋值
2021/06/03 Python
Windows server 2022创建创建林、域树、子域的步骤
2022/06/25 Servers