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制作刷网页流量工具
Apr 23 Python
python脚本替换指定行实现步骤
Jul 11 Python
使用Python从零开始撸一个区块链
Mar 14 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
基于Python打造账号共享浏览器功能
May 30 Python
简单了解Python3里的一些新特性
Jul 13 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
May 11 Python
python rolling regression. 使用 Python 实现滚动回归操作
Jun 08 Python
python模块如何查看
Jun 16 Python
Python unittest如何生成HTMLTestRunner模块
Sep 08 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 #Python
OpenCV全景图像拼接的实现示例
opencv 分类白天与夜景视频的方法
python如何利用traceback获取详细的异常信息
Jun 05 #Python
Python异常类型以及处理方法汇总
Jun 05 #Python
Python OpenCV 彩色与灰度图像的转换实现
You might like
自动跳转中英文页面
2006/10/09 PHP
在字符串中把网址改成超级链接
2006/10/09 PHP
重新封装zend_soap实现http连接安全认证的php代码
2011/01/12 PHP
php Xdebug的安装与使用详解
2013/06/20 PHP
PHP中获取文件创建日期、修改日期、访问时间的方法
2016/11/05 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
更优雅的事件触发兼容
2011/10/24 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
vue init webpack 建vue项目报错的解决方法
2018/09/29 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
jQuery实现数字自动增加或者减少的动画效果示例
2018/12/11 jQuery
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
python 输出列表元素实例(以空格/逗号为分隔符)
2019/12/25 Python
Python requests获取网页常用方法解析
2020/02/20 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
党员学习十八大感想
2014/01/17 职场文书
股东合作协议书
2014/04/14 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
现场施工员岗位职责
2015/04/11 职场文书
羊脂球读书笔记
2015/06/30 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
解决xampp安装后Apache无法启动
2022/03/21 Servers