罗马值与整数值的相互转换"/>
解决Python中罗马值与整数值的相互转换
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 0n_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 resulta=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 = 0for 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 Falsea=getintsum("CMLXXXIV") #984
print(a)
调用了字典的方法,还是运用列表中的循环遍历筛选
更多推荐
解决Python中罗马值与整数值的相互转换
发布评论