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实现扫描指定目录下的子目录及文件的方法
Jul 16 Python
Python中Continue语句的用法的举例详解
May 14 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
详解 Python中LEGB和闭包及装饰器
Aug 03 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
Mar 19 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
docker-py 用Python调用Docker接口的方法
Aug 30 Python
Python 使用threading+Queue实现线程池示例
Dec 21 Python
Python使用Pandas库常见操作详解
Jan 16 Python
详解pandas获取Dataframe元素值的几种方法
Jun 14 Python
详解Python多线程下的list
Jul 03 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 #Python
OpenCV全景图像拼接的实现示例
opencv 分类白天与夜景视频的方法
python如何利用traceback获取详细的异常信息
Jun 05 #Python
Python异常类型以及处理方法汇总
Jun 05 #Python
Python OpenCV 彩色与灰度图像的转换实现
You might like
js下函数般调用正则的方法附代码
2008/06/22 PHP
php判断表是否存在的方法
2015/06/18 PHP
php+flash+jQuery多图片上传源码分享
2020/07/27 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
js获取变量
2006/08/24 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
JavaScript实现存储HTML字符串示例
2014/04/21 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
Ajax使用原生态JS验证用户名是否存在
2020/05/26 Javascript
Angular 中 select指令用法详解
2016/09/29 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python中的匿名函数使用简介
2015/04/27 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
PyCharm 设置SciView工具窗口的方法
2019/01/15 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
医院实习接收函
2014/01/12 职场文书
教师见习报告范文
2014/11/03 职场文书
工商局调档介绍信
2015/10/22 职场文书
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB