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生成随机MAC地址
Mar 10 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
Django实现简单分页功能的方法详解
Dec 05 Python
python实现神经网络感知器算法
Dec 20 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
python3下载抖音视频的完整代码
Jun 05 Python
Python 中的 global 标识对变量作用域的影响
Aug 12 Python
python 定时器每天就执行一次的实现代码
Aug 14 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
Python爬虫后获取重定向url的两种方法
Jan 19 Python
python实现Thrift服务端的方法
Apr 20 Python
讲解Python实例练习逆序输出字符串
May 06 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 #Python
OpenCV全景图像拼接的实现示例
opencv 分类白天与夜景视频的方法
python如何利用traceback获取详细的异常信息
Jun 05 #Python
Python异常类型以及处理方法汇总
Jun 05 #Python
Python OpenCV 彩色与灰度图像的转换实现
You might like
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
2019/03/25 PHP
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
js禁止浏览器页面后退功能的实例(推荐)
2017/09/01 Javascript
详解jquery插件jquery.viewport.js学习使用方法
2017/09/08 jQuery
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
vue 详情跳转至列表页实现列表页缓存
2019/03/27 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
Node.js Domain 模块实例详解
2020/03/18 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
Python translator使用实例
2008/09/06 Python
Python中的并发编程实例
2014/07/07 Python
TensorFlow实现Softmax回归模型
2018/03/09 Python
python实现加密的方式总结
2020/01/19 Python
python中数据库like模糊查询方式
2020/03/02 Python
Anaconda的安装及其环境变量的配置详解
2020/04/22 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
2020/10/30 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
加拿大最大的相机店:Henry’s
2017/05/17 全球购物
2014小学教师个人工作总结
2014/11/10 职场文书
库房管理员岗位职责
2015/02/12 职场文书
2015年社区关工委工作总结
2015/04/03 职场文书
2015年新教师工作总结
2015/04/28 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
工作后的感想
2015/08/07 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js