整数转换与罗马数字的相互转换

先介绍python中的一种数据结构——字典。
字典(dictionary)是python中一个非常有用的内置数据类型。字典是一种映射类型(mapping type),它是一个无序的键:值对集合。 关键字必须使用不可变类型,也就是说list和包含可变类型的tuple不能做关键字。在同一个字典中关键字还必须互不相同。

>>> dic = {} #创建空字典
>>> type(dic)
<class 'dict'>

>>> tel = {'Tom':123,'Jack':234,'Rose':345}
>>> tel
{'Rose': 345, 'Jack': 234, 'Tom': 123}

>>> tel['Tom'] = 789 #修改
>>> tel
{'Rose': 345, 'Jack': 234, 'Tom': 789}

>>> tel.get('Tom') #由键得到键值
789

>>> tel['Jame'] = 567  #添加键值对
>>> tel 
{'Rose': 345, 'Jame': 567, 'Jack': 234, 'Tom': 789}

#要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
>>> tel.pop('Jame')
567
>>> tel
{'Rose': 345, 'Jack': 234, 'Tom': 789}
>>> tel.get('Andy')  #没有这个键时,返回None
>>>
>
>>> list(tel.keys()) #返回由所有key组成的list
['Jack', 'Tom']

>>> list(tel.values()) #返回由所有value组成的list
[234, 789]

>>> 'Tom' in tel #成员测试
True

题目:

一、给定一个整数 num,将整数转换成罗马数字。

如 1,2,3,4,5对应的罗马数字分别为I,II,III,IV,V等,更详细的说明见此 链接。
输入格式

第一行输入一个整数 num(1≤num≤3999)
输出格式

输出 num 对应的罗马数字。
样例输入

123

样例输出

CXXIII

二、给定一个罗马数字 s,将罗马数字转换成整数。

如罗马数字I,II,III,IV,V分别代表数字 1,2,3,4,5。

首先要来了解一下罗马数字表示法,基本字符有 7 个:I、V、X、L、C、D、M,分别表示 1、5、10、50、100、500、1000。

在构成数字的时候,有下列规则:

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

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

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

4、正常使用时,连写的数字重复不得超过三次。
输入格式

输入一个罗马数字字符串,其对应的数字为 s(1≤s≤3999)。
输出格式

输出对应的整数 s。
样例输入

CXXIII

样例输出

123

代码如下:

def roman_to_num(s):
    sum = 0
    convert = {'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1}
    for i in range(len(s)-1):
        if convert[s[i]]<convert[s[i+1]]:
            sum = sum -convert[s[i]]
        else:
            sum = sum+convert[s[i]]
    return sum+convert[s[-1]]
s = input()
print(roman_to_num(s))

def num_to_roman(num):
    g = {1:'I',2:'II',3:'III',4:'IV',5:'V',6:'VI',7:'VII',8:'VIII',9:'IX'}
    s = {1:'X',2:'XX',3:'XXX',4:'XL',5:'L',6:'LX',7:'LXX',8:'LXXX',9:'XC'}
    b = {1:'C',2:'CC',3:'CCC',4:'CD',5:'D',6:'DC',7:'DCC',8:'DCCC',9:'CM'}
    q = {1:'M',2:'MM',3:'MMM'}
    roman = ''
    if num > 1000:
        num_q = num // 1000
        roman += q.get(num_q)
        num %= 1000
    if num > 100:
        num_b = num // 100
        roman += b.get(num_b)
        num %= 100
    if num > 10:
        num_s = num // 10
        roman += s.get(num_s)
        num %= 10
    if num > 0:
        num_g = num
        roman += g.get(num)
    return roman
num = int(input())
print(num_to_roman(num))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值