• 罗马数字转阿拉伯数字(20201225张晓平)


    1 罗马数字是位置计数吗?它的缺点是什么?

    位置计数是一种表达数字的系统,数位按照顺序排列 ,每个数位有一个位值,数字的值是每个数位和位值的乘积之和。

    罗马数字技术规律

    相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;

    小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;

    小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;

    在一个数的上面画一条横线,表示这个数增值 1,000 倍,如 

    明显两种技术方法不同,所以我认为这个不是位置计数

    缺点1.罗马数字中没有零。
    2.罗马数字书写繁琐且运算复杂

    2 把你的8位学号(20201225)转化成罗马数字

    mmxx  mccxxv
    3 参考上面的博客,用Pyhton写一个罗马数字转化为阿拉伯数字

    def getRomanNum(RomanStr):
    """Roman numerals will be converted into digital,RomanStr is a RomanString"""
    import re
    if re.search('^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$',RomanStr)!=None:
    NumDic = {"pattern":"","retNum":0}
    RomanPattern = {
    "0":('','','','M'),
    "1":('CM','CD','D','C',100),
    "2":('XC','XL','L','X',10),
    "3":('IX','IV','V','I',1)
    }
    i = 3
    NumItems = sorted(RomanPattern.items())
    for RomanItem in NumItems:
    if RomanItem[0] != '0':
    patstr = NumDic["pattern"].join(['',RomanItem[1][0]])
    if re.search(patstr,RomanStr) != None:
    NumDic["retNum"] += 9*RomanItem[1][4]
    NumDic["pattern"] = patstr
    else:
    patstr = NumDic["pattern"].join(['',RomanItem[1][1]])
    if re.search(patstr,RomanStr) != None:
    NumDic["retNum"] += 4*RomanItem[1][4]
    NumDic["pattern"] = patstr
    else:
    patstr = NumDic["pattern"].join(['',RomanItem[1][2]])
    if re.search(patstr,RomanStr) != None:
    NumDic["retNum"] += 5*RomanItem[1][4]
    NumDic["pattern"] = patstr
    if NumDic["pattern"] == '':
    NumDic["pattern"] = '^'
    tempstr = ''
    sum = 0
    for k in range(0,4):
    pstr = RomanItem[1][3].join(['','{']).join(['',str(k)]).join(['','}'])
    patstr = NumDic["pattern"].join(['',pstr])
    if re.search(patstr,RomanStr) != None:
    sum = k*(10**i)
    tempstr = patstr
    if tempstr <> '':
    NumDic["pattern"] = tempstr
    else:
    NumDic["pattern"] = patstr
    NumDic['retNum'] += sum
    i -= 1
    return NumDic['retNum']
    else:
    print 'String is not a valid Roman numerals'

    代码参考学习:https://www.jb51.net/article/138306.htm

     
  • 相关阅读:
    装饰器模式
    doraemon的python 三元函数
    doraemon的python 文件操作
    doraemon的python 深浅拷贝和文件操作
    doraemon的python 集合
    doraemon的python 字典
    doraemon的python 列表
    doraemon 周总结1
    doraemon的python 练习
    doraemon的python之旅 整型、布尔值和字符串2
  • 原文地址:https://www.cnblogs.com/shwan-1949/p/13835187.html
Copyright © 2020-2023  润新知