罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

此题来源:力扣(LeetCode)

方法一:

利用re.findall函数灵活解决

import redef caculate_sum(a):Roman_number = {'M': 1000, 'CM': 900, 'D': 500, 'CD': 400, 'XC': 90, 'L': 50, 'XL': 40,\'X':10, 'IX': 9, 'V': 5, 'IV': 4, 'III': 3, 'II': 2, 'I': 1}b = re.findall(r'CM|IV|IX|XL|XC|CD|III|II|I|V|X|L|C|D|M', a)sum = 0for Roman in b:sum += Roman_number[Roman]return sumwhile True:a = input("Please input an Roman numbers:\n input 'q' to quit\n")if a == 'q':breakprint(f"The sum is {caculate_sum(a)}")

代码介绍:

caculate_sum函数:用于将罗马数字转化为整数,并返回最终的结果。

Roman_number函数:这里存储每一个罗马字符,对应的十进制数

re.findall函数,对输入的罗马字符a进行查找,并输出到b列表中,在这里|这个符号的作用是或者的意思,他按照从前到后的循序依次返回,拿III|II|I这个来举例,如果有IIIIIIII,八个I连续排列,那么他最后返回的式III,III,II,如果有七个I连续排列,那么最后返回的值为III,III,I。

方法二:

利用enumerate函数解决。

我们首先仔细观察罗马数字的特点,可以得出另外一种解决方法,如果罗马数字是按照从大到小的循序依次排列的,那只需将每一个罗马数字对应的整数相加就可以。

例如:VIII表示的整数值,等于V(5) + I(1) + I(1) + I(1) = 8

但是如果出现小的罗马数字排列在大的罗马数字左边,那么就应该用大的罗马数字减去小的罗马数字。

例如: IV表示的整数值:等于V(5) - V(1) = 4

enumerate函数介绍:

enumerate函数:enumerate(参数1),参数1一般为一列字符串,那么enumerate会将字符串中的每一个字符给一个序号,从0开始排序

enumerate(参数1,参数2):参数2是你指定的序号开始数字,如果希望从1开始,只需将参数设置为1.

程序设计思路:

将每个罗马字符及其对应的整数大小,存储在字典中。然后根据以上的规律,我们可以考虑,首先利用enumerate函数,将输入的字符按照循序排列,针对每一个字符按照上面介绍的罗马数字特点进行处理。

def caculate(a):"""将输入的罗马数字a转化为整数"""Roman_number = {'M': 1000, 'CM': 900, 'D': 500, 'CD': 400, 'XC': 90, 'C': 100, 'L': 50,\'XL': 40, 'X':10, 'IX': 9, 'V': 5, 'IV': 4, 'III': 3, 'II': 2, 'I': 1}"""将罗马数字对应的值放入字典中"""sum = 0for x, y in enumerate(a):if x + 1 <= len(a) - 1 and Roman_number[y] < Roman_number[a[x + 1]]:sum += -Roman_number[y]else:sum += Roman_number[y]return sumwhile True:a = input("Please input an Roman numbers:\n input 'q' to quit\n")if a == 'q':breakprint(f"The sum is {caculate(a)}")

运算结果如下:

方法比较,两种方法都比较简介,看读者更喜欢哪种方式了

点赞的人2022年都会桃花运爆满,运气爆棚,如果本文对您有帮助,请记得点赞~

re.findall函数和enumerate函数实现罗马数字转化为整数的方法比较相关推荐

  1. python中enumerate()函数_Python enumerate() 函数

    Python中的enumerate函数主要用于字符串.列表或元组的遍历时.一般的,当需要对字符串.列表或元组进行遍历的时候,最简单的方式如下(这里以list为例): l = [1,2,3,4,5] f ...

  2. python enumerate函数_关于python中enumerate和zip函数的用法及举例

    关于python中enumerate和zip函数的用法及举例 关于enumerate函数: enumerate函数可以同时返回列表或元组等可迭代对象的下标和内容,但实际上,enumerate函数实际返 ...

  3. Python enumerate 函数 - Python零基础入门教程

    目录 一.Python enumerate 函数介绍 二.Python enumerate 函数使用 1.Python enumerate 函数案例 1 2.Python enumerate 函数案例 ...

  4. [转载] python enumerate函数 实例_python中使用enumerate函数遍历元素实例

    参考链接: Python enumerate() 这个是python的一个内建函数,看书的时候发现了他,mark一下 当我们既需要遍历索引同时需要遍历元素的时候,可以考虑使用enumerate函数,e ...

  5. python里enumerate函数_python中的enumerate函数

    enumerate 函数用于遍历序列中的元素以及它们的下标: >>> for i,j in enumerate(('a','b','c')): print i,j 0 a 1 b 2 ...

  6. 【Python常用函数】一文让你彻底掌握Python中的enumerate函数

    任何事情都是由量变到质变的过程,学习Python也不例外.只有把一个语言中的常用函数了如指掌了,才能在处理问题的过程中得心应手,快速地找到最优方案.本文和你一起来探索Python中的enumerate ...

  7. Python enumerate() 函数的使用

    enumerate() 函数 在 Python 2.3. 以上版本可用 enumerate() 函数的作用: enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索 ...

  8. python中的enumerate 函数(编号的实现方式)

    enumerate 函数用于遍历序列中的元素以及它们的下标: 默认从0开始,如果想从1开始,可以仿照最后案例 加上逗号,和数字编号 >>> for i,j in enumerate( ...

  9. Python 中的 enumerate 函数

    enumerate 函数用于遍历序列中的元素以及它们的下标: >>> for i,j in enumerate(('a','b','c')):print i,j 0 a 1 b 2 ...

最新文章

  1. 纯CSS实现Tab栏的切换
  2. JAVA线程池原理以及几种线程池类型介绍
  3. 程序员十大非技术面试问题及策略
  4. wxWidgets:wxRegEx类用法
  5. linux挂载NTFS分区
  6. nginx 并发过十万
  7. 两种方法解决tomcat的 Failed to initialize end point associated with ProtocolHandler [http-apr-8080]...
  8. php连接access带密码,phpadodb连接带密码access数据库实例,测试成功
  9. C# 从入门到精通 学习笔记1 第2章 使用变量、操作符和表达式
  10. 分享5个高质无损音乐网站,歌曲很丰富,爱听歌的小伙伴有耳福了
  11. 二硫键交联的巯基化壳聚糖水凝胶/pH、离子强度敏感性的壳聚糖水凝胶CS-GA-ASP
  12. 参观一家买过十年货的淘宝店是怎样的体验?——新魔术8000生产基地探秘
  13. “SCSA-S学习导图+”系列:文件包含
  14. python给列表的N个元素赋值-*表达式
  15. python股票分析之放量跌倒底买入
  16. 【算法与数据结构】海康相机接收数据转Mat结构
  17. 海蜘蛛路由 U 盘安装方法
  18. 转转和闲鱼哪个流量大?哪个用户多?
  19. 数学定理证明机械化的中国学派(I)
  20. 打开 android studio 由于Gradle下载慢卡死的问题

热门文章

  1. 大学里,你是不是也正在这样无聊着(三)
  2. 动态电压降问题解决方法总结
  3. 虚拟机搭建单机版Hadoop教程(惨痛经历)
  4. 这份2021Java程序员常用技术栈和工具清单,刷爆了朋友圈...
  5. java开发boss直聘要求(2020年4月27日)
  6. 我的时间管理——短期计划与长期计划
  7. php用什么系统好_php编程用什么系统好?
  8. icc校色文件使用教程_Win10校色文件ICM在哪里 Win10对显示器校色图文步骤
  9. 【科学文献计量】中英文文献标题及摘要用词情感分析与可视化
  10. java中Stream的使用以及List转set和map方法