再写“罗马数字字符串转整”

news2024/12/24 2:19:33

输入有效的罗马数字字符串,返回对应的十进制整数(字符大小写均可)。


(笔记模板由python脚本于2024年03月12日 16:01:08创建,本篇笔记适合对罗马数字感兴趣且有一定编程基础的coder翻阅)


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


输入有效的罗马数字字符串
罗马数字转整型
(返回对应的十进制整数,字符大小均可)


本文质量分:

96 96 96

本文地址: https://blog.csdn.net/m0_57158496/article/details/136655180

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ 罗马数字转整型
    • 1、再探“罗马数字”
    • 2、算法解析
      • 2.1 罗马数字的0
      • 2.2 罗马数字码表
      • 2.3 从高位循环处理大于一位的字符串
      • 2.4 两种方式处理最后一个单一字符
      • 2.5 输入输出
    • 3、完整源码(Python)
    • 4、曾经写下的关于“罗马数字”的代码


◆ 罗马数字转整型


1、再探“罗马数字”


  • 老笔记评论截屏
    在这里插入图片描述
      在罗马数字构造规则中说明,除了V(5)、L(5)、D(500)不可以重复外其余字符都可以重复三次,当前一字符不小于后一字符10/1时,为有效减法。且表示减法时,前一字符只可以是I、X、C。据此说明, X I X XIX XIX合法有效

  一条老笔记的评论,让我再去对“罗马数字”探究查验。过程中,发现了“罗马数字转整”还有一种与原来我的思路 不 一 样 不一样 的写法。记录一下😋



回页目录


2、算法解析


  罗马数字与十进制整数一样,高位在左;不同的是需将字符或者字符组合(减法。如IV、CM等)表示数值相加。本文只讨论“合法有效”的输入字符串。代码不对输入合法判定,请确保输入正确的罗马数字字符串试码。


  • 代码运行效果截屏图片
    在这里插入图片描述
    在这里插入图片描述

2.1 罗马数字的0


  罗马数字没有表示0的字符。如需表示0,一般采用空格或者阿拉伯数字0来表示


Python代码


    if roman in (' ', '0'):
        return 0 # 直接返回0。



回页目录


2.2 罗马数字码表


  罗马数字(字符:数值)字典,用dict、zip函数生成。


Python代码


    romans = dict(zip('IVXLCDM', [1, 5, 10, 50, 100, 500, 1000])) # 罗马数字(字符:数值)列表zip函数生成。



回页目录


2.3 从高位循环处理大于一位的字符串


Python代码


    while len(roman) > 1:
        first, second = list(roman[:2])
        
        if romans[first] < romans[second]: # 减法。
            num += romans[second]-romans[first] # 累加当前转换int。
            roman = roman[2:] # 刷新未转换字符串。
        else: # 加法。
            num += romans[first] # 累加当前转换int。
            roman = roman[1:] # 刷新未转换字符串。



回页目录


2.4 两种方式处理最后一个单一字符


  根据前面while循环的代码,最后一个单一字符有可能是空字符串’’,所以得有抛出“KeyError”异常的应对之法。可以采用dict.get方法取值,给出方法的第二参数;亦可以用三元操作语句规避。


Python代码


    #return num + romans.get(roman, 0) # 用dict.get方法取单一字符值,是避免key不在字典中报错(字符串为空时)。
    return num + romans[roman] if roman else num # 用三元操作语句避免键值为空报错。

  采用两种方式写,所目的完全一致。



回页目录


2.5 输入输出


Python代码


if __name__ == '__main__':
    roman = input('\n输入:')
    roman = roman if len(roman) == 1 else roman.strip() # 如果输入不是单个字符串,去除前后空格。
    print(f"\n输出:{romanToInt(roman)}")



回页目录


3、完整源码(Python)

(源码较长,点此跳过源码)



def romanToInt(roman: str) -> int:
    ''' 本函数不对输入合法判定,请确保输入正确的罗马数字字符串 '''
    if roman in (' ', '0'):
        return 0 # 直接返回0。
    roman = roman.upper() # 将输入字符串转大写字母。
    romans = dict(zip('IVXLCDM', [1, 5, 10, 50, 100, 500, 1000])) # 罗马数字(字符:数值)列表zip函数生成。
    num = 0 # roman转整型变量初值。
    
    while len(roman) > 1:
        first, second = list(roman[:2])
        
        if romans[first] < romans[second]: # 减法。
            num += romans[second]-romans[first] # 累加当前转换int。
            roman = roman[2:] # 刷新未转换字符串。
        else: # 加法。
            num += romans[first] # 累加当前转换int。
            roman = roman[1:] # 刷新未转换字符串。

    #return num + romans.get(roman, 0) # 用dict.get方法取单一字符值,是避免key不在字典中报错(字符串为空时)。
    return num + romans[roman] if roman else num # 用三元操作语句避免键值为空报错。


if __name__ == '__main__':
    roman = input('\n输入:')
    roman = roman if len(roman) == 1 else roman.strip() # 如果输入不是单个字符串,去除前后空格。
    print(f"\n输出:{romanToInt(roman)}")



回页目录


4、曾经写下的关于“罗马数字”的代码


  1. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:7.5k
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)

  2. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    地址:https://blog.csdn.net/m0_57158496/article/details/122608526
    浏览阅读:4.3k
    (本篇笔记于2022-01-20 19:38:12首次发布,最后修改于2022-01-21 18:32:02)

  3. 练习:罗马数字转整数
    地址:https://blog.csdn.net/m0_57158496/article/details/122578460
    浏览阅读:1.3k
    评论:3
    (本篇笔记于2022-01-19 12:58:28首次发布,最后修改于2024-03-07 12:53:39)

  4. 罗马数字判定器( bug 修正)
    地址:https://blog.csdn.net/m0_57158496/article/details/122755675
    浏览阅读:1.0k
    摘要:罗马数字判定器_怎么检查'是不是罗马字母。
    (本篇笔记于2022-01-30 21:22:51首次发布,最后修改于2022-02-03 13:39:50)

  5. 罗马数字判定器
    地址:https://blog.csdn.net/m0_57158496/article/details/122627292
    浏览阅读:736
    摘要:罗马数字判定器_c# 判断字符串是否是罗马数字。
    (本篇笔记于2022-01-21 18:34:28首次发布,最后修改于2022-02-09 07:06:33)



回页首


上一篇:  命名元组(命名元组与元组的差异,命名元组和字典,哪个效率更高)
下一篇: 



我的HOT博:

  本次共计收集289篇博文笔记信息,总阅读量44.72w。数据采集于2023年12月11日 23:07:13,用时5分11.8秒。阅读量不小于4.0k的有17篇。

  1. ChatGPT国内镜像站初体验:聊天、Python代码生成等
    地址:https://blog.csdn.net/m0_57158496/article/details/129035387
    浏览阅读:6.2w
    点赞:127 收藏:809 评论:71
    (本篇笔记于2023-02-14 23:46:33首次发布,最后修改于2023-07-03 05:50:55)

  2. 让QQ群昵称色变的神奇代码
    地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    浏览阅读:5.8w
    点赞:24 收藏:86 评论:17
    (本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)

  3. Python列表(list)反序(降序)的7种实现方式
    地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    浏览阅读:9.9k
    点赞:5 收藏:30 评论:8
    (本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)

  4. pandas 数据类型之 DataFrame
    地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    浏览阅读:9.4k
    点赞:7 收藏:34 
    摘要:pandas 数据类型之 DataFrame_panda dataframe。
    (本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)

  5. 个人信息提取(字符串)
    地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    浏览阅读:7.7k
    摘要:个人信息提取(字符串)_python个人信息提取。
    (本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)

  6. Python字符串居中显示
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    浏览阅读:7.2k
    评论:1
  7. 罗马数字转换器|罗马数字生成器
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    浏览阅读:7.2k
    (本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)

  8. 斐波那契数列的递归实现和for实现
    地址:https://blog.csdn.net/m0_57158496/article/details/122355295
    浏览阅读:5.6k
    点赞:4 收藏:2 评论:8
  9. 回车符、换行符和回车换行符
    地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    浏览阅读:5.5k
    点赞:2 收藏:3 
    摘要:回车符、换行符和回车换行符_命令行回车符。
    (本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)

  10. python清屏
    地址:https://blog.csdn.net/m0_57158496/article/details/120762101
    浏览阅读:5.3k
  11. 练习:字符串统计(坑:f‘string‘报错)
    地址:https://blog.csdn.net/m0_57158496/article/details/121723096
    浏览阅读:5.1k
  12. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
    地址:https://blog.csdn.net/m0_57158496/article/details/121645399
    浏览阅读:5.1k
    点赞:14 收藏:44 
  13. 我的 Python.color() (Python 色彩打印控制)
    地址:https://blog.csdn.net/m0_57158496/article/details/123194259
    浏览阅读:4.6k
    点赞:2 收藏:8 
    摘要:我的 Python.color() (Python 色彩打印控制)_python color。
    (本篇笔记于2022-02-28 22:46:21首次发布,最后修改于2022-03-03 10:30:03)

  14. 练习:生成100个随机正整数
    地址:https://blog.csdn.net/m0_57158496/article/details/122558220
    浏览阅读:4.6k
    (本篇笔记于2022-01-18 13:31:36首次发布,最后修改于2022-01-20 07:58:12)

  15. 密码强度检测器
    地址:https://blog.csdn.net/m0_57158496/article/details/121739694
    浏览阅读:4.4k
    (本篇笔记于2021-12-06 09:08:25首次发布,最后修改于2022-11-27 09:39:39)

  16. 罗马数字转换器(用罗马数字构造元素的值取模实现)
    地址:https://blog.csdn.net/m0_57158496/article/details/122608526
    浏览阅读:4.2k
    (本篇笔记于2022-01-20 19:38:12首次发布,最后修改于2022-01-21 18:32:02)

  17. 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
    地址:https://blog.csdn.net/m0_57158496/article/details/124424935
    浏览阅读:4.0k
    摘要:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)_生日模拟问题,计算频率,并画出随着试验次数n的增大,频率和理论概率的 关系图。
    (本篇笔记于2022-04-26 12:46:25首次发布,最后修改于2022-04-27 21:22:07)

推荐条件 阅读量突破4.0k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首


老齐漫画头像

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1512708.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

和泓海棠府——与阳光大海约会 悦享惬意生活

海南三亚海棠湾 四季如春的梦想在这里即可实现和泓海棠府 与阳光大海约会 悦享惬意生活 如果在三亚有一套房 你就可以把父母接过来一起住 尽己所能让老人圆一个海居梦 带着孩子一起在园林里探索自然 陪孩子度过每一个有趣的海边假期 你也可以随时沿着会唱歌的沙滩迎风漫…

爬虫技术必学之用强大的正则提取一切你想要的内容!JavaScript正则表达式提取网站高价值信息【附代码】!

前面给大家介绍过&#xff0c;本人既精通GIS开发全栈技术&#xff0c;也精通爬虫技术&#xff0c;对人工智能算法也比较熟悉。这些技术我会一一给大家讲解。 今天&#xff0c;咱们的主题是给大家通过一个案例讲解一下正则表达式的强大之处。当我们用爬虫获取网页的源码或内容时…

波司登:品牌引领 从中国第一迈向“全球领先”

专注羽绒服领域48年&#xff0c;波司登不断夯实品牌核心竞争力&#xff0c;推进新型工业化&#xff0c;培育新质生产力&#xff0c;扛起新时代企业责任担当—— 波司登&#xff1a;品牌引领 从中国第一迈向“全球领先” 入选工信部首批“工业图强”企业史志优秀案例&#xff0c…

【数仓】通过Flume+kafka采集日志数据存储到Hadoop

相关文章 【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用&#xff08;集群配置&#xff09;【数仓】Hadoop集群配置常用参数说明【数仓】zookeeper软件安装及集群配置【数仓】kafka软件安装及集群配置【数仓】flume软件安…

【C++】string学习 — 手搓string类项目

手搓string项目 1 string类介绍2 功能描述3 代码实现3.0 基础框架3.1 构造函数 和 析构函数3.2 流操作符重载 和 尾插扩容3.4 运算符重载3.5 实用功能3.6 迭代器模拟 总结这里提供一下源代码&#xff1a;Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;…

摄像机内存卡删除的视频如何恢复?恢复指南来袭

在现代社会&#xff0c;摄像机已成为记录生活、工作和学习的重要设备。然而&#xff0c;随着使用频率的增加&#xff0c;误删或意外丢失视频的情况也时有发生。面对这样的情况&#xff0c;许多用户可能会感到无助和困惑。那么&#xff0c;摄像机内存卡删除的视频真的无法恢复吗…

【AnaConda/MiniConda/Linux】使用sudo python或切换root管理员conda环境被绕过解决方案

写在前面 部分机型修改环境变量存在风险&#xff0c;可能用于被覆盖而出现大量命令无法找到的情况 可以输入这个解决 export PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin往期相关内容 探索Miniconda3&#xff1a;简单、灵活的Python环境和…

HTML 学习笔记(九)颜色值和长度单位

一、颜色 1.通过RGB值来设置颜色 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>table</title&…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的癌症图像检测系统(深度学习模型+UI界面代码+训练数据集)

摘要&#xff1a;本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统&#xff0c;以提高医疗诊断的精度和速度。系统基于先进的YOLOv8算法&#xff0c;并对比分析了YOLOv7、YOLOv6、YOLOv5的性能&#xff0c;如mAP和F1 Score。详细解释了YOLOv8的原理&#xff0c;并附…

【how2j练习题】css部分课堂练习

1.表格斑马线 <style>table {width: 500px;border-collapse: collapse;}tr#title {background-color: white;text-align: center;border-bottom: 5px solid gold;}tr#id1 {text-align: center;border-bottom: 2px solid blueviolet;}tr#id2 {text-align: center;border-b…

【C++】STL(六) list容器

7. list容器7.1 简介7.2 构造函数例子 7.3 赋值和交换例子 7.4 大小操作例子 7.5 插入和删除例子 7.6 数据存取例子 7.7 反转和排序例子 7. list容器 7.1 简介 ① 功能&#xff1a;将数据进行链式存储。 ② 链表(list)是一种物理存储单元上非连续的存储结构&#xff0c;数据…

Python环境下一维时间序列的小波尺度谱和时间平均小波谱(基于Morlet小波)

小波分析是较好的非平稳信号分析方法之一&#xff0c;它通过伸缩和平移运算对信号进行多尺度细化分析&#xff0c;能够在不同的尺度上描述信号的局部特征&#xff0c;为微弱故障特征信号的检测提供了有效的工具。小波尺度谱可看作一个有恒定相对带宽的谱图&#xff0c;能够反映…

Linux fork函数详解

文章目录 1 基本介绍2 fork实例2.1 多个fork返回值2.2 C语言 fork与输出2.3 fork &#x1f4a3; 1 基本介绍 #include <sys/types.h> #include <unistd.h>pid_t fork(void)描述 fork用于创建一个子进程&#xff0c;它与父进程的唯一区别在于其PID和PPID&#xff0…

【Linux】Linux小结

LVS、Nginx、HAproxy的区别 LVS、Nginx和HAproxy都是常见的负载均衡器&#xff0c;用于将网络负载分散到多个服务器上&#xff0c;以提高系统的可用性和性能 功能不同&#xff1a; LVS是一个Linux内核模块&#xff0c;在网络层&#xff08;第四层&#xff09;运行的。 Nginx和…

Java错误:微服务报错Cannot execute request on any known serve

&#x1f414;问题内容 报Cannot execute request on any known server 这个错&#xff1a;连接Eureka服务端地址不对。 &#x1f414;解决方式 检查.yml文件或者.properties文件配置 下划线下划线后面的小写字母等同于去掉下划线大写下划线后面的字母&#xff08;驼峰原则&am…

一道题学会如何使用哈希表

给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], …

【任务计划程序】打卡签到(自用)

文章目录 前言效果如下&#xff1a; 任务计划程序其他签到代码&#xff08;更新如下&#xff09; 前言 【github actionpython】完成定时任务并推送&#xff08;学会自制&#xff09;&#xff08;这里的github上这个glados签到不能用了&#xff0c;glados上的部分功能也变了&a…

学完Efficient c++ (39-40)

条款39&#xff1a;明智而审慎地使用private继承 private继承的特点&#xff1a; 如果类之间是private继承关系&#xff0c;那么编译器不会自动将一个派生类对象转换为一个基类对象。由private继承来的所有成员&#xff0c;在派生类中都会变为private属性&#xff0c;换句话说…

大白话ChatGPT技术

▼最近直播超级多&#xff0c;预约保你有收获 今晚直播&#xff1a;《ChatGPT架构设计与应用案例实践》 —1— ChatGPT 架构设计剖析 ChatGPT 总体架构由三大部分构成&#xff1a;预训练&#xff08;Pre-training&#xff09;架构、微调&#xff08;Fine-tuning&#xff09;架…

sqllab第五关通关笔记

知识点&#xff1a; 报错注入函数语法&#xff08;详见第二关笔记&#xff09;报错注入打印位数最多32位对于大于32位的数据最好使用截取函数进行控制&#xff1b;以保证输出完整mysql表中的重点数据库 information_schema &#xff08;mysql 5.0以上&#xff09; schemata …