X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/84b462901aece7eda7ef1704c748a5e5b4b3df26..fefdce4e24f9e397df5538fe6e7f54b5ece4d841:/librarian/util.py diff --git a/librarian/util.py b/librarian/util.py deleted file mode 100644 index 0886fd5..0000000 --- a/librarian/util.py +++ /dev/null @@ -1,124 +0,0 @@ -# Functions to convert between integers and Roman numerals. Doctest examples included. -# by Paul Winkler -# http://code.activestate.com/recipes/81611-roman-numerals/ -# PSFL (GPL compatible) -import os - - -def int_to_roman(input): - """ - Convert an integer to Roman numerals. - - Examples: - >>> int_to_roman(0) - Traceback (most recent call last): - ValueError: Argument must be between 1 and 3999 - - >>> int_to_roman(-1) - Traceback (most recent call last): - ValueError: Argument must be between 1 and 3999 - - >>> int_to_roman(1.5) - Traceback (most recent call last): - TypeError: expected integer, got - - >>> for i in range(1, 21): print int_to_roman(i) - ... - I - II - III - IV - V - VI - VII - VIII - IX - X - XI - XII - XIII - XIV - XV - XVI - XVII - XVIII - XIX - XX - >>> print int_to_roman(2000) - MM - >>> print int_to_roman(1999) - MCMXCIX - """ - if type(input) != type(1): - raise TypeError, "expected integer, got %s" % type(input) - if not 0 < input < 4000: - raise ValueError, "Argument must be between 1 and 3999" - ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) - nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') - result = "" - for i in range(len(ints)): - count = int(input / ints[i]) - result += nums[i] * count - input -= ints[i] * count - return result - -def roman_to_int(input): - """ - Convert a roman numeral to an integer. - - >>> r = range(1, 4000) - >>> nums = [int_to_roman(i) for i in r] - >>> ints = [roman_to_int(n) for n in nums] - >>> print r == ints - 1 - - >>> roman_to_int('VVVIV') - Traceback (most recent call last): - ... - ValueError: input is not a valid roman numeral: VVVIV - >>> roman_to_int(1) - Traceback (most recent call last): - ... - TypeError: expected string, got - >>> roman_to_int('a') - Traceback (most recent call last): - ... - ValueError: input is not a valid roman numeral: A - >>> roman_to_int('IL') - Traceback (most recent call last): - ... - ValueError: input is not a valid roman numeral: IL - """ - if type(input) != type(""): - raise TypeError, "expected string, got %s" % type(input) - input = input.upper() - nums = ['M', 'D', 'C', 'L', 'X', 'V', 'I'] - ints = [1000, 500, 100, 50, 10, 5, 1] - places = [] - for c in input: - if not c in nums: - raise ValueError, "input is not a valid roman numeral: %s" % input - for i in range(len(input)): - c = input[i] - value = ints[nums.index(c)] - # If the next place holds a larger number, this value is negative. - try: - nextvalue = ints[nums.index(input[i +1])] - if nextvalue > value: - value *= -1 - except IndexError: - # there is no next place. - pass - places.append(value) - sum = 0 - for n in places: sum += n - # Easiest test for validity... - if int_to_roman(sum) == input: - return sum - else: - raise ValueError, 'input is not a valid roman numeral: %s' % input - - -def makedirs(path): - if not os.path.isdir(path): - os.makedirs(path) \ No newline at end of file