【Python CheckiO 题解】Roman Numerals


CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。

CheckiO 官网:https://checkio.org/

我的 CheckiO 主页:https://py.checkio.org/user/TRHX/

CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html

CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise


题目描述

【Roman Numerals】:将阿拉伯数字转换成罗马数字

【链接】:https://py.checkio.org/mission/roman-numerals/

【输入】:一个整数形式的阿拉伯数字

【输出】:一个字符串形式的罗马数字

【前提】:0 < number < 4000

【范例】

checkio(6) == 'VI'
checkio(76) == 'LXXVI'
checkio(13) == 'XIII'
checkio(44) == 'XLIV'
checkio(3999) == 'MMMCMXCIX'

解题思路

先将一到十、十位整数和百位整数以列表形式列出来,分为四种情况:一位数、两位数、三位数和四位数,每种情况还要判断是否为整数,不是整数的,将其除以位数的余,再次传给 checkio() 函数,求剩下的值。

这种方法比较繁琐,语法简单,不适合大一点的数字,太菜了,看看大神的解答吧

代码实现

def checkio(data):roman_list1 = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']roman_list2 = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC']roman_list3 = ['C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM']if 0 < data < 10:roman = roman_list1[data - 1]return romanelif 10 <= data < 100:if data % 10 == 0:roman = roman_list2[data // 10 - 1]else:roman = roman_list2[data // 10 - 1] + checkio(data % 10)return romanelif 100 <= data < 1000:if data % 100 == 0:roman = roman_list3[data // 100 - 1]else:roman = roman_list3[data // 100 - 1] + checkio(data % 100)return romanelif 1000 <= data < 9999:if data % 1000 == 0:roman = 'M' * (data // 1000)else:roman = 'M' * (data // 1000) + checkio(data % 1000)return romanif __name__ == '__main__':# These "asserts" using only for self-checking and not necessary for auto-testingassert checkio(6) == 'VI', '6'assert checkio(76) == 'LXXVI', '76'assert checkio(499) == 'CDXCIX', '499'assert checkio(3888) == 'MMMDCCCLXXXVIII', '3888'print('Done! Go Check!')

大神解答

大神解答 NO.1

def checkio(n):result = ''for arabic, roman in zip((1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1),'M     CM   D    CD   C    XC  L   XL  X   IX V  IV I'.split()):result += n // arabic * romann %= arabicreturn result

大神解答 NO.2

roman1 = ('', 'M', 'MM', 'MMM')
roman2 = ('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM')
roman3 = ('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC')
roman4 = ('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX')def checkio(data):data1 = int(data / 1000)data2 = int(data % 1000 / 100)data3 = int(data % 100 / 10)data4 = int(data % 10 )return roman1[data1] + roman2[data2] + roman3[data3] + roman4[data4]

大神解答 NO.3

def checkio(data):s = ''ones = ['X','I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX']tens = ['C', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC']mils = ['M', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM']if data / 1000 != 0:s = s + 'M'*(data/1000)data = data % 1000if data / 100 != 0:s = s + mils[data/100]data = data % 100if data / 10 != 0:s = s + tens[data/10]data = data % 10if data / 1 != 0:s = s + ones[data/1]return s

大神解答 NO.4

from enum import Enumclass Roman(Enum):M  = 1000CM = 900D  = 500CD = 400C  = 100XC = 90L  = 50XL = 40X  = 10IX = 9V  = 5IV = 4I  = 1@classmethoddef encode(cls, n):for numeral in cls:rep, n = divmod(n, numeral.value)yield numeral.name * repcheckio = lambda n: ''.join(Roman.encode(n))

大神解答 NO.5

def checkio(data):base = "I"*database = base.replace("I"*5, "V")base = base.replace("V"*2, "X")base = base.replace("X"*5, "L")base = base.replace("L"*2, "C")base = base.replace("C"*5, "D")base = base.replace("D"*2, "M")base = base.replace("DCCCC", "CM")base = base.replace("CCCC", "CD")base = base.replace("LXXXX", "XC")base = base.replace("XXXX", "XL")base = base.replace("VIIII", "IX")base = base.replace("IIII", "IV")return base

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

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

相关文章

Dynamics CRM 2016 安装

Dynamics CRM 2016 安装 CRM 2016出来了一段时间了&#xff0c;一直也没机会尝试一下&#xff0c;现在再测试ADFS的时候顺手装一个测试环境&#xff0c;记录一下整个安装配置流程。 首先准备好windows 2012 std&#xff0c;sql server 2014&#xff0c; dynamics crm2016安装…

【Python CheckiO 题解】Largest Rectangle in a Histogram

CheckiO 是面向初学者和高级程序员的编码游戏&#xff0c;使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务&#xff0c;从而提高你的编码技能&#xff0c;本博客主要记录自己用 Python 在闯关时的做题思路和实现代码&#xff0c;同时也学习学习其他大神写的代码。 Chec…

Dynamics 365 on-premises 安装

安装Dynamics 365环境配置要求&#xff1a; 系统版本&#xff1a;Windows Server 2016 SQL 版本&#xff1a; Microsoft SQL Server 2016 SP2 Dynamics 365 版本&#xff1a;CRM9.0-Server-CHS-amd64 安装步骤&#xff1a; 一.在虚拟机安装Windows Server 2016 二.安装好…

【Python CheckiO 题解】Date and Time Converter

CheckiO 是面向初学者和高级程序员的编码游戏&#xff0c;使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务&#xff0c;从而提高你的编码技能&#xff0c;本博客主要记录自己用 Python 在闯关时的做题思路和实现代码&#xff0c;同时也学习学习其他大神写的代码。 Chec…

2.1Dynamics 365 安装问题——无法访MSCRM_CONFIG数据库

1&#xff0e; 问题 2&#xff0e; 原因 出现此问题的一个或多个下列条件都为真︰ 在多务器中安装 Microsoft Dynamics 365。然后&#xff0c;直接在运行 Microsoft SQL Server 的服务器上安装 Microsoft Dynamics 365。但是&#xff0c;没有设置某些 SQL Server 权限。Mic…

【Python CheckiO 题解】Army Battles

CheckiO 是面向初学者和高级程序员的编码游戏&#xff0c;使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务&#xff0c;从而提高你的编码技能&#xff0c;本博客主要记录自己用 Python 在闯关时的做题思路和实现代码&#xff0c;同时也学习学习其他大神写的代码。 Chec…

Dynamics 365 On-premises和Online 的不同

1、新建账号的不同&#xff1a;on-premises(下文简称op)是和ad绑定的&#xff0c;所以必须先在ad中新建账号后才能在CRM中新建。而online是和Office365(下文简称O365)绑定的&#xff0c;所以需在O365中新建账号再分配D365许可(前提是已购买license),当分配完许可后&#xff0c;…

华中科技大学文华学院 CSDN 高校俱乐部成立啦!

CSDN高校俱乐部是由中国专业的IT社区 CSDN&#xff08;Chinese Software Develop Net&#xff09;发起的&#xff0c;由全国各高校在校生代表自发加入的 IT 技术学习型组织。CSDN 由此搭建起行业与校园之间的桥梁&#xff0c;公益为各俱乐部提供行业资讯、技术学习、专家交流、…

4.Dynamics CRM 数据数量限制更改

1.在CRM2016中如果想要导出超过10000记录数据&#xff0c;更新 MaxRecordsForExportToExcel 这个字段的值。 SELECT MaxRecordsForExportToExcel FROM [FCCRM_MSCRM].[dbo].[OrganizationBase] 2.列表页面&#xff0c;最大显示的数量 5000&#xff0c;修改 DeploymentProper…

2019年总结【跨越今天,更不平凡】

还记得小时候写作文&#xff0c;畅想2020会怎样怎样&#xff0c;光阴似箭&#xff0c;2020真的来了&#xff0c;度过了艰难的考试周&#xff0c;抽了个晚上&#xff0c;回想了一下&#xff0c;决定写一写总结吧&#xff0c;似乎以前都没写过呢&#xff0c;那干脆连带2017、2018…

【转】LCS和LCS服务器应用程序概述

Live Communication Server 2005&#xff08;以下简称LCS&#xff09;是微软最新推出的企业即时消息服务器&#xff0c;使用业界标准的SIP协议。本文介绍LCS及LCS服务器应用程序。目录 1. 1. LCS2005概览 1.1 Live Communications Server 2005是什么&#xff1b; 1.2 …

Hexo博客:您备案的网站未指向阿里云国内节点(不含香港)服务器,备案号可能被取消接入

问题描述&#xff1a;经检查您的网站域名 xxxxxx 未指向阿里云国内节点&#xff08;不含香港&#xff09;服务器且无访问记录 &#xff0c;依据工信部相关法规规定属于空壳网站&#xff0c;请您尽快将域名解析IP地址指向阿里云国内节点&#xff08;不含香港&#xff09;服务器。…

【转】win10录屏快捷键报错显示需要新应用打开ms-gamingoverlay

Win10 截图快捷键 winshift s Win10 录屏快捷键 winG &#xff0c;提示&#xff1a;需要新应用打开此ms-gamingoverlay 这也是因为被你卸载了Xbox相关的应用或者文件&#xff0c;所以无法启用了。解决办法如下&#xff1a; 1.管理员方式运行powershell 快捷键&#xff1a;ct…

【Python 必会技巧】获取字典中(多个)最大值(value)的键(key)

先总结一下&#xff0c;分为以下四种情况&#xff1a; 情况一&#xff1a;最大值只有一个&#xff0c;只获取最大值&#xff08;value&#xff09;所对应的键&#xff08;key&#xff09;情况二&#xff1a;最大值只有一个&#xff0c;同时获取最大值&#xff08;value&#x…

【Python 必会技巧】对字典按照键(key)或者值(value)排序

先总结一下&#xff0c;分为以下四种情况&#xff1a; 情况一&#xff1a;按照键排序&#xff0c;只输出排序后所有的键情况二&#xff1a;按照值排序&#xff0c;只输出排序后所有的值情况三&#xff1a;按照键排序&#xff0c;同时输出排序后所有的键和对应的值情况四&#…

【Python 必会技巧】三元表达式(三目运算符)

三元表达式是编程中的一个固定格式&#xff0c;一般编程语言的格式为&#xff1a;判段条件 ? 条件为真时的结果 : 条件为假时的结果&#xff0c;举例说明&#xff1a; int A,B,C; A 1; B 2; C A > B ? 10 : 20; 解释&#xff1a;如果 A > B&#xff0c;就将 10 赋…

【转】Microsoft Cloud全新认证体系介绍

IT认证&#xff0c;是IT技术从业者必不可少的一个敲门砖&#xff0c;有了它让甲方、乙方以及原厂对你有了基本的了解&#xff0c;能够初步预判您是否胜任这一工作岗位。例如&#xff0c;大家耳熟能详的Microsoft MCSE&#xff0c;RedHat RHCE&#xff0c;VMware VCP、CISSP、CI…

【Python 必会技巧】使用 split() 方法对字符串进行切片

split() 方法可以将一个字符串按照指定的分隔符分割成多个子字符串&#xff0c;子字符串将会保存到列表中&#xff08;不包含分隔符&#xff09; split() 方法的语法&#xff1a;str.split(sep,maxsplit) str&#xff1a;要分割的字符串 sep&#xff1a;用于指定分隔符&…

【转】azure认证路线以及学习资源

Azure认证路线 考取AZ-300以及AZ-301 学习资源https://docs.microsoft.com/zh-cn/azure/https://docs.microsoft.com/zh-cn/learn/paths/azure-fundamentals/ 考试指南https://www.microsoft.com/zh-cn/learning/exam-AZ-300.aspxhttps://www.microsoft.com/zh-cn/learning/…

【Python 必会技巧】使用 join() 方法将序列中的元素拼接成字符串

Python 中 join() 方法可以将序列中的元素以指定的字符连接生成一个新的字符串。该序列可以是字符串、元组、列表或者字典 join() 方法的语法&#xff1a;str.join(sequence)&#xff0c;其中 str&#xff1a;分隔符&#xff0c;可以为空&#xff1b;sequence&#xff1a;要连…