⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 roman.py

📁 dive int python document
💻 PY
字号:
"""Convert to and from Roman numeralsThis program is part of "Dive Into Python", a free Python book forexperienced programmers.  Visit http://diveintopython.org/ for thelatest version."""__author__ = "Mark Pilgrim (mark@diveintopython.org)"__version__ = "$Revision: 1.3 $"__date__ = "$Date: 2004/05/05 21:57:19 $"__copyright__ = "Copyright (c) 2001 Mark Pilgrim"__license__ = "Python"import re#Define exceptionsclass RomanError(Exception): passclass OutOfRangeError(RomanError): passclass NotIntegerError(RomanError): passclass InvalidRomanNumeralError(RomanError): pass#Define digit mappingromanNumeralMap = (('M',  1000),				   ('CM', 900),				   ('D',  500),				   ('CD', 400),				   ('C',  100),				   ('XC', 90),				   ('L',  50),				   ('XL', 40),				   ('X',  10),				   ('IX', 9),				   ('V',  5),				   ('IV', 4),				   ('I',  1))def toRoman(n):	"""convert integer to Roman numeral"""	if not (0 < n < 5000):		raise OutOfRangeError, "number out of range (must be 1..4999)"	if int(n) <> n:		raise NotIntegerError, "non-integers can not be converted"	result = ""	for numeral, integer in romanNumeralMap:		while n >= integer:			result += numeral			n -= integer	return result#Define pattern to detect valid Roman numeralsromanNumeralPattern = re.compile('''	^				   # beginning of string	M{0,4}			  # thousands - 0 to 4 M's	(CM|CD|D?C{0,3})	# hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),						#			or 500-800 (D, followed by 0 to 3 C's)	(XC|XL|L?X{0,3})	# tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),						#		or 50-80 (L, followed by 0 to 3 X's)	(IX|IV|V?I{0,3})	# ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),						#		or 5-8 (V, followed by 0 to 3 I's)	$				   # end of string	''' ,re.VERBOSE)def fromRoman(s):	"""convert Roman numeral to integer"""	if not s:		raise InvalidRomanNumeralError, 'Input can not be blank'	if not romanNumeralPattern.search(s):		raise InvalidRomanNumeralError, 'Invalid Roman numeral: %s' % s	result = 0	index = 0	for numeral, integer in romanNumeralMap:		while s[index:index+len(numeral)] == numeral:			result += integer			index += len(numeral)	return result

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -