解决Python中罗马值与整数值的相互转换

    xiaoxiao2022-06-24  183

    1.问题:

    创建一个以正整数为参数的函数,并返回一个包含该整数的罗马数字表示形式的字符串。现代罗马数字是通过从最左边的数字开始分别表示每个数字,跳过任何值为零的数字来编写的。用罗马数字表示1990:1000=M, 900=CM, 90=XC;导致MCMXC。将2008写成2000=MM, 8=VIII;或MMVIII。1666年按降序使用每个罗马符号:MDCLXVI。

    Symbol     Value

       I               1

       V              5

       X             10

        L             50

        C            100

         D           500

         M           1,000

    一:将数字转换成罗马值,根据上述的题目我们大致对这道题目应该有着自己的理解了,下面就开始上码了

    def getroman(n): if n > 3999 or n < 1: return 0 n_tuple = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1] roman_tuple = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I'] result = "" for i in range(n_tuple): while n >= n_tuple[i]: n -= n_tuple[i] result += roman_tuple[i] return result a=getroman(1001) print(a) num = int(input("please")) # 确定个十百千各自位置上的0~9对应罗马字母 c = { 'g': ('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'), 's': ('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'), 'b': ('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'), 'q': ('', 'M', 'MM', 'MMM') } roman = [] # 用整除和取余获得个十百千对应的数字 roman.append(c['q'][num // 1000]) roman.append(c['b'][(num // 100) % 10]) roman.append(c['s'][(num // 10) % 10]) roman.append(c['g'][num % 10]) print(''.join(roman))

    第一种方法:主要是运用while循环的方法,让数字在两组给出的数列中进行判断,锻炼思维还行

    第二种方法更加的直观,适用于刚学python,应用基础很好

    二:数字转换成罗马值

    话不多说直接上码

    def getintsum(s): d = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000} result = 0 for i in range(len(s) - 1): if d[s[i]] < d[s[i + 1]]: print(d[s[i]]) result -= d[s[i]] else: result += d[s[i]] result += d[s[len(s) - 1]] return result if 1 < result < 3999 else False a=getintsum("CMLXXXIV") #984 print(a)

    调用了字典的方法,还是运用列表中的循环遍历筛选

     


    最新回复(0)