-
Notifications
You must be signed in to change notification settings - Fork 0
/
roman.py
68 lines (59 loc) · 1.69 KB
/
roman.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#!/usr/bin/env python3
"""
В римской системе счисления для обозначения чисел
используются следующие символы:
I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000
Числа 4, 9, 40, 90, 400 и 900
записываются как вычитание из большего числа меньшего:
IV, IX, XL, XC, CD и CM, соответственно.
Написать функции для перевода чисел:
- из римской системы в десятичную
- из десятичной системы в римскую
"""
def get_num(inp, pos):
num = int(inp)
dic = {
0: ("M", "?", "?", "?"),
1: ("C", "CD", "D", "CM"),
2: ("X", "XL", "L", "XC"),
3: ("I", "IV", "V", "IX"),
}
one, four, five, nine = dic[pos]
if num < 4:
return one * num
elif num == 4:
return four
elif 4 < num < 9:
return five + (one * (num - 5))
elif num == 9:
return nine
def decimal_to_roman(inp):
lst = list()
if int(inp) > 9999:
return "The number is too big"
if int(inp) < 10:
inp = "000" + inp
elif int(inp) < 100:
inp = "00" + inp
elif int(inp) < 1000:
inp = "0" + inp
for i in range(len(inp)):
lst.append(get_num(inp[i], i))
return "".join(lst)
def roman_to_decimal(inp):
dic = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
rom = 0
while inp:
if len(inp) == 1 or dic[inp[0]] >= dic[inp[1]]:
rom += dic[inp[0]]
inp = inp[1:]
else:
rom += dic[inp[1]] - dic[inp[0]]
inp = inp[2:]
return rom