116 lines
3.9 KiB
Plaintext
116 lines
3.9 KiB
Plaintext
|
PEP: 313
|
||
|
Title: Adding Roman Numeral Literals to Python
|
||
|
Version: $Revision $
|
||
|
Last-Modified: $Date $
|
||
|
Author: Mike Meyer <mwm@mired.org>
|
||
|
Status: Draft
|
||
|
Type: Standards Track
|
||
|
Content-Type: text/plain
|
||
|
Created: 01-Apr-2003
|
||
|
Python-Version: 2.4
|
||
|
Post-History:
|
||
|
|
||
|
|
||
|
Abstract
|
||
|
|
||
|
This PEP proposes adding Roman numerals as a literal type. It
|
||
|
also proposes the new built-in function "roman", which converts an
|
||
|
object to an integer, then converts the integer to a string that
|
||
|
is the Roman numeral literal equivalent to the integer.
|
||
|
|
||
|
|
||
|
Rationale
|
||
|
|
||
|
Roman numerals are used in a number of areas, and adding them to
|
||
|
Python as literals would make computations in those areas easier.
|
||
|
For instance, Superbowls are counted with Roman numerals, and many
|
||
|
older movies have copyright dates in Roman numerals. Further,
|
||
|
LISP provides a Roman numerals literal package, so adding Roman
|
||
|
numerals to Python will help ease the LISP-envy sometimes seen in
|
||
|
comp.lang.python. Besides, the author thinks this is the easiest
|
||
|
way to get his name on a PEP.
|
||
|
|
||
|
|
||
|
Syntax for Roman literals
|
||
|
|
||
|
Roman numeral literals will consist of the characters M, D, C, L,
|
||
|
X, V and I, and only those characters. They must be in upper
|
||
|
case, and represent an integer with the following rules:
|
||
|
|
||
|
1. Except as noted below, they must appear in the order M, D, C,
|
||
|
L, X, V then I. Each occurence of each character adds 1000, 500,
|
||
|
100, 50, 10, 5 and 1 to the value of the literal, respectively.
|
||
|
|
||
|
2. Only one D, V or L may appear in any given literal.
|
||
|
|
||
|
3. At most three Is, Xs and Cs may appear in any given literal.
|
||
|
|
||
|
4. A single I may appear immediately to the left of the single V,
|
||
|
followed by no Is, and adds 4 to the value of the literal.
|
||
|
|
||
|
5. A single I may likewise appear before the last X, followed by
|
||
|
no Is or Vs, and adds 9 to the value.
|
||
|
|
||
|
6. X is to L and C as I is to V and X, except the values are 40
|
||
|
and 90, respectively.
|
||
|
|
||
|
7. C is to D and M as I is to V and X, except the values are 400
|
||
|
and 900, respectively.
|
||
|
|
||
|
Any literal composed entirely of M, D, C, L, X, V and I characters
|
||
|
that does not follow this format will raise a syntax error,
|
||
|
because explicit is better than implicit.
|
||
|
|
||
|
|
||
|
Builtin "roman" Function
|
||
|
|
||
|
The new builtin function "roman" will aide the translation from
|
||
|
integers to Roman numeral literals. It will accept a single
|
||
|
object as an argument, and return a string containing the literal
|
||
|
of the same value. If the argument is not an integer or a
|
||
|
rational (see PEP 239 [1]) it will passed through the existing
|
||
|
builtin "int" to obtain the value. This may cause a loss of
|
||
|
information if the object was a float. If the object is a
|
||
|
rational, then the result will be formatted as a rational literal
|
||
|
(see PEP 240 [2]) with the integers in the string being Roman
|
||
|
numeral literals.
|
||
|
|
||
|
|
||
|
Compatability Issues
|
||
|
|
||
|
No new keywords are introduced by this proposal. Programs that
|
||
|
use variable names that are all upper case and contain only the
|
||
|
characters M, D, C, L, X, V and I will be affected by the new
|
||
|
literals. These programs will now have syntax errors when those
|
||
|
variables are assigned, and either syntax errors or subtle bugs
|
||
|
when those variables are referenced in expressions. Since such
|
||
|
variable names violate PEP 8 [3], the code is already broken, it
|
||
|
just wasn't generating exceptions. This proposal corrects that
|
||
|
oversight in the language.
|
||
|
|
||
|
|
||
|
References
|
||
|
|
||
|
[1] PEP 239, Adding a Rational Type to Python
|
||
|
http://www.python.org/peps/pep-0239.html
|
||
|
|
||
|
[2] PEP 240, Adding a Rational Literal to Python
|
||
|
http://www.python.org/peps/pep-0240.html
|
||
|
|
||
|
[3] PEP 8, Style Guide for Python Code
|
||
|
http://www.python.org/peps/pep-0008.html
|
||
|
|
||
|
|
||
|
Copyright
|
||
|
|
||
|
This document has been placed in the public domain.
|
||
|
|
||
|
|
||
|
^L
|
||
|
Local Variables:
|
||
|
mode: indented-text
|
||
|
indent-tabs-mode: nil
|
||
|
sentence-end-double-space: t
|
||
|
fill-column: 70
|
||
|
End:
|