python: Add the Python implementation of the phoentic generator
Add the Python implementation of the phoentic table generator.
This commit is contained in:
45
python/phogen_map/roman.py
Normal file
45
python/phogen_map/roman.py
Normal file
@ -0,0 +1,45 @@
|
||||
roman_symbol = [
|
||||
[ "IV", 4 ],
|
||||
[ "IX", 9 ],
|
||||
[ "XL", 40 ],
|
||||
[ "XC", 90 ],
|
||||
[ "CD", 400 ],
|
||||
[ "CM", 900 ],
|
||||
[ "I", 1 ],
|
||||
[ "V", 5 ],
|
||||
[ "X", 10 ],
|
||||
[ "L", 50 ],
|
||||
[ "C", 100 ],
|
||||
[ "D", 500 ],
|
||||
[ "M", 1000]
|
||||
]
|
||||
|
||||
# Convert an integer to its roman representation as string
|
||||
def int_to_roman(i):
|
||||
s = ""
|
||||
for rs in sorted(roman_symbol, key=lambda x: x[1], reverse=True):
|
||||
count = i // rs[1]
|
||||
s += rs[0] * count
|
||||
if count > 0:
|
||||
i %= rs[1] * count
|
||||
|
||||
return s
|
||||
|
||||
# Convert a roman number to its integer value; return 0 on error
|
||||
def roman_to_int(s):
|
||||
i = 0
|
||||
su = s.upper()
|
||||
while len(su) > 0:
|
||||
for rs in roman_symbol:
|
||||
if su.startswith(rs[0]):
|
||||
break
|
||||
else:
|
||||
return 0
|
||||
|
||||
i += rs[1]
|
||||
su = su.removeprefix(rs[0])
|
||||
|
||||
if s.upper() != int_to_roman(i):
|
||||
return 0
|
||||
|
||||
return i
|
||||
Reference in New Issue
Block a user