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编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Python中使用插入排序算法的简单分析与代码示例
May 04 Python
python实现多线程抓取知乎用户
Dec 12 Python
python对json的相关操作实例详解
Jan 04 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
numpy.meshgrid()理解(小结)
Aug 01 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
python实点云分割k-means(sklearn)详解
May 28 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
python 爬取百度文库并下载(免费文章限定)
Dec 04 Python
Python中Matplotlib的点、线形状、颜色以及绘制散点图
Apr 07 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 #Python
OpenCV全景图像拼接的实现示例
opencv 分类白天与夜景视频的方法
python如何利用traceback获取详细的异常信息
Jun 05 #Python
Python异常类型以及处理方法汇总
Jun 05 #Python
Python OpenCV 彩色与灰度图像的转换实现
You might like
php xml 入门学习资料
2011/01/01 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
jquery对单选框,多选框,文本框等常见操作小结
2014/01/08 Javascript
jQuery打印图片pdf、txt示例代码
2014/07/22 Javascript
JavaScript中使用自然对数ln的方法
2015/06/14 Javascript
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
Javascript中的 “&” 和 “|” 详解
2017/02/02 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
python smtplib发送带附件邮件小程序
2018/05/22 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
Python设计模式之原型模式实例详解
2019/01/18 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
幼师专业求职推荐信
2013/11/08 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
优秀信贷员先进事迹
2014/01/31 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
车间机修工岗位职责
2014/02/28 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
2014年企业党建工作总结
2014/12/18 职场文书
上甘岭观后感
2015/06/10 职场文书
教师远程培训心得体会
2016/01/09 职场文书
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang