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

📄 roman9.py

📁 Dive into Python 中文版
💻 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__ = "Steve Lamm, Mark Pilgrim (mark@diveintopython.org)"__version__ = "$Revision: 1.3 $"__date__ = "$Date: 2004/05/05 21:57:20 $"__copyright__ = "Copyright (c) 2001 Steve Lamm, Copyright (c) 2001 Mark Pilgrim"__license__ = "Python"import re#Define exceptionsclass RomanError(Exception): passclass OutOfRangeError(RomanError): passclass NotIntegerError(RomanError): passclass InvalidRomanNumeralError(RomanError): pass#Roman numerals must be less than 5000MAX_ROMAN_NUMERAL = 4999#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))#Create tables for fast conversion of roman numerals.#See fillLookupTables() below.toRomanTable = [ None ]  # Skip an index since Roman numerals have no zerofromRomanTable = {}def toRoman(n):    """convert integer to Roman numeral"""    if not (0 < n <= MAX_ROMAN_NUMERAL):        raise OutOfRangeError, "number out of range (must be 1..4999)"    if int(n) <> n:        raise NotIntegerError, "non-integers can not be converted"    return toRomanTable[n]def fromRoman(s):    """convert Roman numeral to integer"""    if not s:        raise InvalidRomanNumeralError, 'Input can not be blank'    if not fromRomanTable.has_key(s):        raise InvalidRomanNumeralError, 'Invalid Roman numeral: %s' % s    return fromRomanTable[s]def toRomanDynamic(n):    """convert integer to Roman numeral using dynamic programming"""    assert(0 < n <= MAX_ROMAN_NUMERAL)    assert(int(n) == n)    result = ""    for numeral, integer in romanNumeralMap:        if n >= integer:            result = numeral            n -= integer            break      if n > 0:        result += toRomanTable[n]    return resultdef fillLookupTables():    """compute all the possible roman numerals"""    #Save the values in two global tables to convert to and from integers.    for integer in range(1, MAX_ROMAN_NUMERAL + 1):        romanNumber = toRomanDynamic(integer)        toRomanTable.append(romanNumber)        fromRomanTable[romanNumber] = integer    fillLookupTables()

⌨️ 快捷键说明

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