Skip to content

Commit 657073d

Browse files
authored
Update roman_numerals.py
1 parent 5e41453 commit 657073d

File tree

1 file changed

+14
-38
lines changed

1 file changed

+14
-38
lines changed

conversions/roman_numerals.py

+14-38
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,12 @@
11
ROMAN = [
2-
(1000000, "M_"),
3-
(900000, "C_M_"),
4-
(500000, "D_"),
5-
(400000, "C_D_"),
6-
(100000, "C_"),
7-
(90000, "X_C_"),
8-
(50000, "L_"),
9-
(40000, "X_L_"),
10-
(10000, "X_"),
11-
(9000, "I_X_"),
12-
(5000, "V_"),
13-
(4000, "I_V_"),
14-
(1000, "M"),
15-
(900, "CM"),
16-
(500, "D"),
17-
(400, "CD"),
18-
(100, "C"),
19-
(90, "XC"),
20-
(50, "L"),
21-
(40, "XL"),
22-
(10, "X"),
23-
(9, "IX"),
24-
(5, "V"),
25-
(4, "IV"),
26-
(1, "I"),
2+
(1000000, "M_"), (900000, "C_M_"), (500000, "D_"), (400000, "C_D_"),
3+
(100000, "C_"), (90000, "X_C_"), (50000, "L_"), (40000, "X_L_"),
4+
(10000, "X_"), (9000, "I_X_"), (5000, "V_"), (4000, "I_V_"),
5+
(1000, "M"), (900, "CM"), (500, "D"), (400, "CD"),
6+
(100, "C"), (90, "XC"), (50, "L"), (40, "XL"),
7+
(10, "X"), (9, "IX"), (5, "V"), (4, "IV"), (1, "I")
278
]
28-
29-
30-
def roman_to_int(roman: str) -> int:
9+
def roman_to_int(roman):
3110
"""
3211
Convert a Roman numeral to an integer, supporting Vinculum notation
3312
(underscore _ represents 1000 times).
@@ -42,21 +21,20 @@ def roman_to_int(roman: str) -> int:
4221
>>> all(roman_to_int(key) == value for key, value in tests.items())
4322
True
4423
"""
45-
vals = dict(ROMAN) # Convert the list of tuples to a dictionary
24+
vals = {roman: arabic for arabic, roman in ROMAN}
25+
# Convert the list of tuples to a dictionary
4626

4727
i, total = 0, 0
4828
while i < len(roman):
49-
# Check for 2-character symbols first (like I_ or X_)
50-
if i + 1 < len(roman) and roman[i : i + 2] in vals:
51-
total += vals[roman[i : i + 2]]
29+
# 先匹配 2 个字符的罗马数字(如 I_、X_)
30+
if i + 1 < len(roman) and roman[i:i+2] in vals:
31+
total += vals[roman[i:i+2]]
5232
i += 2
5333
else:
5434
total += vals[roman[i]]
5535
i += 1
5636
return total
57-
58-
59-
def int_to_roman(number: int) -> str:
37+
def int_to_roman(number):
6038
"""
6139
Convert an integer to a Roman numeral, supporting Vinculum notation
6240
(underscore _ represents 1000 times).
@@ -78,9 +56,7 @@ def int_to_roman(number: int) -> str:
7856
if number == 0:
7957
break
8058
return "".join(result)
81-
82-
59+
8360
if __name__ == "__main__":
8461
import doctest
85-
8662
doctest.testmod()

0 commit comments

Comments
 (0)