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写的windows服务不能启动的问题
Apr 15 Python
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
简介Django框架中可使用的各类缓存
Jul 23 Python
python自动化报告的输出用例详解
May 30 Python
python format 格式化输出方法
Jul 16 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
python实现感知器算法(批处理)
Jan 18 Python
Python基于WordCloud制作词云图
Nov 29 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
python time.strptime格式化实例详解
Feb 03 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 #Python
OpenCV全景图像拼接的实现示例
opencv 分类白天与夜景视频的方法
python如何利用traceback获取详细的异常信息
Jun 05 #Python
Python异常类型以及处理方法汇总
Jun 05 #Python
Python OpenCV 彩色与灰度图像的转换实现
You might like
PHP 编写大型网站问题集
2010/05/07 PHP
php explode函数实例代码
2012/02/27 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
JavaScript prototype对象的属性说明
2010/03/13 Javascript
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
基于Jquery的实现回车键Enter切换焦点
2010/09/14 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(2)
2017/02/20 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
vue-router路由懒加载和权限控制详解
2017/12/13 Javascript
npm全局模块卸载及默认安装目录修改方法
2018/05/15 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
python排序方法实例分析
2015/04/30 Python
Python 中Pickle库的使用详解
2018/02/24 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
CHARLES & KEITH加拿大官网:新加坡时尚品牌
2020/03/26 全球购物
应届实习生的自我评价范文
2014/01/05 职场文书
空气环保标语
2014/06/12 职场文书
2015双创工作总结
2015/07/24 职场文书
改进工作作风心得体会
2016/01/23 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP
实例详解Python的进程,线程和协程
2022/03/13 Python
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL