11ROMAN = [
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+
8360if __name__ == "__main__" :
8461 import doctest
85-
8662 doctest .testmod ()
0 commit comments