罗马数字转阿拉伯数字

罗马数字转阿拉伯数字

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

答:不是,缺点有规则复杂,书写不便,没有数字0

罗马数字包含以下七种字符:I, V, X, L,C,D 和 M。(python)

 

字符          数值

 

I             1

 

V             5

 

X             10

 

L             50

 

C             100

 

D             500

 

M             1000

2.将学号20191210转为罗马数字(因罗马数字没有0,用空格表示)

2 -----> II
0 ----->
1 -----> I
9 -----> IX
1 -----> I
2 -----> II
1 -----> I
0----- >

代码如下:

 

def transform_alabo2_roman_num(one_num):

 

     num_list=[1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]

 

     str_list=["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"]

 

     res=''

 

     for i in range(len(num_list)):

 

         while one_num>=num_list[i]:

 

            one_num-=num_list[i]

            res+=str_list[i]

 

     return res

 

def transform_roman_num2_alabo(one_str):

 

  '''''

 

  将罗马数字转化为阿拉伯数字

 

  '''

 

  define_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

 

  if one_str=='0':

 

    return 0

 

  else:

 

    res=0

 

    for i in range(0,len(one_str)):

 

      if i==0 or define_dict[one_str[i]]<=define_dict[one_str[i-1]]:

 

        res+=define_dict[one_str[i]]

 

      else:

 

        res+=define_dict[one_str[i]]-2*define_dict[one_str[i-1]]

 

    return res

 

if __name__ == '__main__':

 

    print ('**************将罗马数字转化为阿拉伯数字**************')

 

    one_str_list=['DII','XV','MDCLXVI','XII','VIII','XCIX','XII']

 

    for one_str in one_str_list:

 

        print (one_str,'----->',transform_roman_num2_alabo(one_str))

 

    print('**************将阿拉伯数字转化为罗马数字**************')

 

    one_num_list=[2,0,1,9,1,2,1,0]

 

    for one_num in one_num_list:

 

        print(one_num,'----->',transform_alabo2_roman_num(one_num))

 

从百度找的代码,验证后正确,但由于没有编程基础,未能理解这段代码。

posted @ 2019-10-16 22:35  pogbar  阅读(425)  评论(0编辑  收藏  举报