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

【Python CheckiO 题解】Roman Numerals相关推荐

  1. Python CheckiO 题解系列 丨 博客目录索引

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本题解系列主要记录自己在用 Python 闯关时的做 ...

  2. 【Python CheckiO 题解】Army Battles

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  3. 【Python CheckiO 题解】Date and Time Converter

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  4. 【Python CheckiO 题解】Largest Rectangle in a Histogram

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  5. 【Python CheckiO 题解】Probably Dice

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  6. 【Python CheckiO 题解】Multicolored Lamp

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  7. 【Python CheckiO 题解】Time Converter (12h to 24h)

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  8. 【Python CheckiO 题解】Speech Module

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  9. 【Python CheckiO 题解】Count Consecutive Summers

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

最新文章

  1. 2016年3月全球操作系统版本份额:Win10仅次win7
  2. Java VS .Net 程序员的困惑 (转)
  3. 发现一个很好的工具——VNN
  4. mysql主从数据库怎么还口令,mysql数据库主从同步方法讲解
  5. 如何给网红变现?Instagram正在尝试一种全新的方式
  6. 斐波那契数列python递归 0、1、1、2、3_python实现斐波那契数列的多种方式
  7. Proactor设计模式:单线程高并发
  8. java飞行记录器是什么_运行java飞行记录器JFR(java flight recorder)
  9. css html 字竖,CSS实现文字竖排 DIV CSS文字垂直竖列排版显示如何实现?
  10. keepalived+lvs搭建高可用负载均衡集群
  11. linux-文件与目录权限-0913
  12. Android 驱动(17)---如何在linux中添加新的kernel module
  13. 洛谷 P1356 数列的整数性 解题报告
  14. 服务器架设项目实训,计算机组网项目实训
  15. HTML5、CSS3进阶——渐变背景
  16. 抖音seo源码.源代码开发可二开搭建/抖音seo优化系统代开发
  17. win7无法看到工作组计算机,Win7系统无法查看工作组问题的解决方法
  18. 基于RFID的简易图书管理系统设计与实现
  19. SAP快速学习小结1
  20. 前端开发学习之【模块化】

热门文章

  1. URLEncoder编码
  2. ios sqlite3 初级应用
  3. 分享制作精良的知识管理系统 配置SQL Server文档数据库 完美实现博客文章的的下载,存储和浏览...
  4. asp。net中常用的文件操作类
  5. XML文档的基本操作
  6. [Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS]
  7. [Leetcode][第114题][JAVA][二叉树展开为链表][递归][迭代]
  8. [Leedcode][JAVA][第990题][等式方程的可满足性][并查集]
  9. [Leedcode][JAVA][第560题][和为K的子数组][Hashmap][数组]
  10. C语言单链表实现FCFS算法,数据结构与算法复习题(含答案).doc