Python 如何将integer转化为罗马数(3999以内)


Posted in Python onJune 05, 2021

1,在Python中将integer数转化为罗马数

说明:在罗马数中(3999以内),和阿拉伯数字相似,可以把它分解为个位,十位,百位,千位,然后相加(我是这么认为的+_+),所以这样就简单了,只需把不同位数的基数表示出来相加即可。

例如:

阿拉伯数字为124=100+20+4,

罗马数字为字符串相加‘CXXIV'=‘C'+‘XX'+IV''

按此规律见代码分析:

注意:4,9,40,90,400,900得用大的减小的表示(因为相同字符相连不超过三个)

def trans(n):
    Dict = {0:'',1:'I',5:'V',10:'X',50:'L',100:'C',500:'D',1000:'M'}  #创建一个匹配字典,注意   0:‘'   是小细节,帮助处理位系数为0的情况
    num_str = str(n)
    s = ''
    for i in range(len(num_str)):  #按位次循环相加
        j = len(num_str)-1-i      #字符是从左到右,10**j表示所在位次 
        num = int(num_str[i])
        if num==0:  #
            s +=''
        else:
            N = num//5  #取整,用来判断是0+  还是5+, 还是5-,还是10-
            M = num%5 #取余,用来判断相同相连的个数,1-3用加,4用减
            if M==4:   #,9,40,90,400,900的情况
                s+=Dict[10**(j)]+Dict[(N+1)*5*10**(j)]   #右减左
            else:
                s+=Dict[N*5*10**(j)]+Dict[10**(j)]*M   #左加右
    return s

2,Python 给定一个整数,将其转为罗马数字

输入确保在 1 到 3999 的范围内

def change(text):    
    num=int(text)    
    # 数组内数据位置不要改,不然就不能从高位开始对比
    checkNum = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
    str =["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX","V", "IV", "I"]
    roman = ""
    i = 0
    #对比完,减去已对比数组,对比数组下个值
    while (num != 0) :
        if (num >= checkNum[i]):
            num -= checkNum[i]
            roman += str[i]
        else:
            i+=1
    return roman
def main():
    text = input("输入整数")
    print(change(text))
main()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基于mysql实现的简单队列以及跨进程锁实例详解
Jul 07 Python
探究python中open函数的使用
Mar 01 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
Python OpenCV获取视频的方法
Feb 28 Python
python放大图片和画方格实现算法
Mar 30 Python
Pandas标记删除重复记录的方法
Apr 08 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
Nov 30 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
Jan 08 Python
Python 存取npy格式数据实例
Jul 01 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
python 远程执行命令的详细代码
Feb 15 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 #Python
OpenCV全景图像拼接的实现示例
opencv 分类白天与夜景视频的方法
python如何利用traceback获取详细的异常信息
Jun 05 #Python
Python异常类型以及处理方法汇总
Jun 05 #Python
Python OpenCV 彩色与灰度图像的转换实现
You might like
php循环table实现一行两列显示的方法
2015/06/04 PHP
7个鲜为人知却非常实用的PHP函数
2015/07/01 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
解决angular的$http.post()提交数据时后台接收不到参数值问题的方法
2015/12/10 Javascript
简述jQuery ajax的执行顺序
2016/01/05 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
Javascript中判断一个值是否为undefined的方法详解
2016/09/28 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
提高JavaScript执行效率的23个实用技巧
2017/03/01 Javascript
面包屑导航详解
2017/12/07 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
解决vue更新路由router-view复用组件内容不刷新的问题
2019/11/04 Javascript
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
Flask-WTF表单的使用方法
2019/07/12 Python
python GUI库图形界面开发之PyQt5动态(可拖动控件大小)布局控件QSplitter详细使用方法与实例
2020/03/06 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
Python 创建守护进程的示例
2020/09/29 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
DERMAdoctor官网:美国著名皮肤护理品牌
2019/07/06 全球购物
2013英文求职信模板范文
2013/11/15 职场文书
文体活动总结范文
2014/05/05 职场文书
机关党员公开承诺书
2014/08/30 职场文书
中职毕业生自我鉴定
2014/09/13 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
mysql数据库隔离级别详解
2022/06/16 MySQL