File: //usr/lib/python3/dist-packages/__pycache__/roman.cpython-38.pyc
U
�++Q�
� @ s� d Z dZdZdZdZddlZG dd� de�ZG d d
� d
e�ZG dd� de�Z G d
d� de�Z
dZdd� Ze�
dej�Zdd� ZdS )z"Convert to and from Roman numeralsz&Mark Pilgrim (f8dy@diveintopython.org)z1.4z
8 August 2001ag Copyright (c) 2001 Mark Pilgrim
This program is part of "Dive Into Python", a free Python tutorial for
experienced programmers. Visit http://diveintopython.org/ for the
latest version.
This program is free software; you can redistribute it and/or modify
it under the terms of the Python 2.1.1 license, available at
http://www.python.org/2.1.1/license.html
� Nc @ s e Zd ZdS )�
RomanErrorN��__name__�
__module__�__qualname__� r r �'/usr/lib/python3/dist-packages/roman.pyr s r c @ s e Zd ZdS )�OutOfRangeErrorNr r r r r r s r c @ s e Zd ZdS )�NotIntegerErrorNr r r r r r
s r
c @ s e Zd ZdS )�InvalidRomanNumeralErrorNr r r r r r s r )
)�Mi� )ZCMi� )�Di� )ZCDi� )�C�d )ZXC�Z )�L�2 )ZXL�( )�X�
)ZIX� )�V� )ZIV� )�I� c C s` t | t�std��d| k r&dk s0n td��d}tD ]"\}}| |kr8||7 }| |8 } q@q8|S )z convert integer to Roman numeralzdecimals can not be convertedr i� z%number out of range (must be 1..4999)� )�
isinstance�intr
r �romanNumeralMap)�n�result�numeral�integerr r r �toRoman( s
r$ a8
^ # 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
c C sj | st d��t�| �s"t d| ��d}d}tD ]6\}}| ||t|� � |kr.||7 }|t|�7 }q6q.|S )z convert Roman numeral to integerzInput can not be blankzInvalid Roman numeral: %sr )r �romanNumeralPattern�searchr �len)�sr! �indexr"