annotate Demo/classes/Rat.py @ 5817:48b94de85bf3 legacy-trunk

Extensive changes by AMK.
author Guido van Rossum <guido@python.org>
date Thu, 17 Jul 1997 16:29:42 +0000
parents ba005e4db4c5
children c447d1ad7851
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
1 '''\
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
2 This module implements rational numbers.
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
3
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
4 The entry point of this module is the function
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
5 rat(numerator, denominator)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
6 If either numerator or denominator is of an integral or rational type,
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
7 the result is a rational number, else, the result is the simplest of
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
8 the types float and complex which can hold numerator/denominator.
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
9 If denominator is omitted, it defaults to 1.
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
10 Rational numbers can be used in calculations with any other numeric
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
11 type. The result of the calculation will be rational if possible.
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
12
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
13 There is also a test function with calling sequence
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
14 test()
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
15 The documentation string of the test function contains the expected
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
16 output.
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
17 '''
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
18
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
19 # Contributed by Sjoerd Mullender
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
20
1966
dd7be8128410 adapted to new overloading scheme
Guido van Rossum <guido@python.org>
parents: 1427
diff changeset
21 from types import *
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
22
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
23 def gcd(a, b):
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
24 '''Calculate the Greatest Common Divisor.'''
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 while b:
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 a, b = b, a%b
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
27 return a
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
28
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
29 def rat(num, den = 1):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
30 # must check complex before float
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
31 if type(num) is ComplexType or type(den) is ComplexType:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
32 # numerator or denominator is complex: return a complex
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
33 return complex(num) / complex(den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
34 if type(num) is FloatType or type(den) is FloatType:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
35 # numerator or denominator is float: return a float
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
36 return float(num) / float(den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
37 # otherwise return a rational
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
38 return Rat(num, den)
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
39
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 class Rat:
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
41 '''This class implements rational numbers.'''
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
43 def __init__(self, num, den = 1):
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 if den == 0:
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
45 raise ZeroDivisionError, 'rat(x, 0)'
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
46
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
47 # normalize
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
48
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
49 # must check complex before float
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
50 if type(num) is ComplexType or type(den) is ComplexType:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
51 # numerator or denominator is complex:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
52 # normalized form has denominator == 1+0j
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
53 self.__num = complex(num) / complex(den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
54 self.__den = complex(1)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
55 return
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
56 if type(num) is FloatType or type(den) is FloatType:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
57 # numerator or denominator is float:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
58 # normalized form has denominator == 1.0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
59 self.__num = float(num) / float(den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
60 self.__den = 1.0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
61 return
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
62 if (type(num) is InstanceType and
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
63 num.__class__ is self.__class__) or \
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
64 (type(den) is InstanceType and
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
65 den.__class__ is self.__class__):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
66 # numerator or denominator is rational
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
67 new = num / den
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
68 if type(new) is not InstanceType or \
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
69 new.__class__ is not self.__class__:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
70 self.__num = new
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
71 if type(new) is ComplexType:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
72 self.__den = complex(1)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
73 else:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
74 self.__den = 1.0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
75 else:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
76 self.__num = new.__num
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
77 self.__den = new.__den
1966
dd7be8128410 adapted to new overloading scheme
Guido van Rossum <guido@python.org>
parents: 1427
diff changeset
78 else:
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
79 # make sure numerator and denominator don't
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
80 # have common factors
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
81 # this also makes sure that denominator > 0
1966
dd7be8128410 adapted to new overloading scheme
Guido van Rossum <guido@python.org>
parents: 1427
diff changeset
82 g = gcd(num, den)
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
83 self.__num = num / g
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
84 self.__den = den / g
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
85 # try making numerator and denominator of IntType if they fit
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
86 try:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
87 numi = int(self.__num)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
88 deni = int(self.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
89 except (OverflowError, TypeError):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
90 pass
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
91 else:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
92 if self.__num == numi and self.__den == deni:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
93 self.__num = numi
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
94 self.__den = deni
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
95
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 def __repr__(self):
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
97 return 'Rat(%s,%s)' % (self.__num, self.__den)
1966
dd7be8128410 adapted to new overloading scheme
Guido van Rossum <guido@python.org>
parents: 1427
diff changeset
98
dd7be8128410 adapted to new overloading scheme
Guido van Rossum <guido@python.org>
parents: 1427
diff changeset
99 def __str__(self):
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
100 if self.__den == 1:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
101 return str(self.__num)
1966
dd7be8128410 adapted to new overloading scheme
Guido van Rossum <guido@python.org>
parents: 1427
diff changeset
102 else:
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
103 return '%s/%s' % (str(self.__num), str(self.__den))
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
104
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
105 # a + b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
106 def __add__(a, b):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
107 try:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
108 return rat(a.__num * b.__den + b.__num * a.__den,
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
109 a.__den * b.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
110 except OverflowError:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
111 return rat(long(a.__num) * long(b.__den) +
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
112 long(b.__num) * long(a.__den),
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
113 long(a.__den) * long(b.__den))
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
114
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
115 def __radd__(b, a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
116 return Rat(a) + b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
117
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
118 # a - b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
119 def __sub__(a, b):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
120 try:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
121 return rat(a.__num * b.__den - b.__num * a.__den,
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
122 a.__den * b.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
123 except OverflowError:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
124 return rat(long(a.__num) * long(b.__den) -
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
125 long(b.__num) * long(a.__den),
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
126 long(a.__den) * long(b.__den))
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
127
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
128 def __rsub__(b, a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
129 return Rat(a) - b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
130
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
131 # a * b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
132 def __mul__(a, b):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
133 try:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
134 return rat(a.__num * b.__num, a.__den * b.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
135 except OverflowError:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
136 return rat(long(a.__num) * long(b.__num),
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
137 long(a.__den) * long(b.__den))
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
138
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
139 def __rmul__(b, a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
140 return Rat(a) * b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
141
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
142 # a / b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
143 def __div__(a, b):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
144 try:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
145 return rat(a.__num * b.__den, a.__den * b.__num)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
146 except OverflowError:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
147 return rat(long(a.__num) * long(b.__den),
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
148 long(a.__den) * long(b.__num))
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
149
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
150 def __rdiv__(b, a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
151 return Rat(a) / b
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
152
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
153 # a % b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
154 def __mod__(a, b):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
155 div = a / b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
156 try:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
157 div = int(div)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
158 except OverflowError:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
159 div = long(div)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
160 return a - b * div
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
161
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
162 def __rmod__(b, a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
163 return Rat(a) % b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
164
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
165 # a ** b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
166 def __pow__(a, b):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
167 if b.__den != 1:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
168 if type(a.__num) is ComplexType:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
169 a = complex(a)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
170 else:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
171 a = float(a)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
172 if type(b.__num) is ComplexType:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
173 b = complex(b)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
174 else:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
175 b = float(b)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
176 return a ** b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
177 try:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
178 return rat(a.__num ** b.__num, a.__den ** b.__num)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
179 except OverflowError:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
180 return rat(long(a.__num) ** b.__num,
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
181 long(a.__den) ** b.__num)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
182
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
183 def __rpow__(b, a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
184 return Rat(a) ** b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
185
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
186 # -a
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
187 def __neg__(a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
188 try:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
189 return rat(-a.__num, a.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
190 except OverflowError:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
191 # a.__num == sys.maxint
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
192 return rat(-long(a.__num), a.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
193
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
194 # abs(a)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
195 def __abs__(a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
196 return rat(abs(a.__num), a.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
197
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
198 # int(a)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
199 def __int__(a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
200 return int(a.__num / a.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
201
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
202 # long(a)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
203 def __long__(a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
204 return long(a.__num) / long(a.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
205
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
206 # float(a)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
207 def __float__(a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
208 return float(a.__num) / float(a.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
209
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
210 # complex(a)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
211 def __complex__(a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
212 return complex(a.__num) / complex(a.__den)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
213
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
214 # cmp(a,b)
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 def __cmp__(a, b):
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
216 diff = a - b
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
217 if diff.__num < 0:
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 return -1
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
219 elif diff.__num > 0:
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 return 1
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
221 else:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
222 return 0
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
223
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
224 def __rcmp__(b, a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
225 return cmp(Rat(a), b)
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
226
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
227 # a != 0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
228 def __nonzero__(a):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
229 return a.__num != 0
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
230
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
231 # coercion
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 def __coerce__(a, b):
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
233 return a, Rat(b)
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
234
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 def test():
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
236 '''\
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
237 Test function for rat module.
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
238
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
239 The expected output is (module some differences in floating
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
240 precission):
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
241 -1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
242 -1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
243 0 0L 0.1 (0.1+0j)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
244 [Rat(1,2), Rat(-3,10), Rat(1,25), Rat(1,4)]
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
245 [Rat(-3,10), Rat(1,25), Rat(1,4), Rat(1,2)]
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
246 0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
247 11/10
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
248 11/10
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
249 1.1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
250 OK
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
251 2 1.5 3/2 (1.5+1.5j) 15707963/5000000
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
252 2 2 2.0 (2+0j)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
253
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
254 4 0 4 1 4 0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
255 3.5 0.5 3.0 1.33333333333 2.82842712475 1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
256 7/2 1/2 3 4/3 2.82842712475 1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
257 (3.5+1.5j) (0.5-1.5j) (3+3j) (0.666666666667-0.666666666667j) (1.43248815986+2.43884761145j) 1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
258 1.5 1 1.5 (1.5+0j)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
259
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
260 3.5 -0.5 3.0 0.75 2.25 -1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
261 3.0 0.0 2.25 1.0 1.83711730709 0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
262 3.0 0.0 2.25 1.0 1.83711730709 1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
263 (3+1.5j) -1.5j (2.25+2.25j) (0.5-0.5j) (1.50768393746+1.04970907623j) -1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
264 3/2 1 1.5 (1.5+0j)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
265
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
266 7/2 -1/2 3 3/4 9/4 -1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
267 3.0 0.0 2.25 1.0 1.83711730709 -1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
268 3 0 9/4 1 1.83711730709 0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
269 (3+1.5j) -1.5j (2.25+2.25j) (0.5-0.5j) (1.50768393746+1.04970907623j) -1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
270 (1.5+1.5j) (1.5+1.5j)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
271
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
272 (3.5+1.5j) (-0.5+1.5j) (3+3j) (0.75+0.75j) 4.5j -1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
273 (3+1.5j) 1.5j (2.25+2.25j) (1+1j) (1.18235814075+2.85446505899j) 1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
274 (3+1.5j) 1.5j (2.25+2.25j) (1+1j) (1.18235814075+2.85446505899j) 1
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
275 (3+3j) 0j 4.5j (1+0j) (-0.638110484918+0.705394566962j) 0
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
276 '''
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
277 print rat(-1L, 1)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
278 print rat(1, -1)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
279 a = rat(1, 10)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
280 print int(a), long(a), float(a), complex(a)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
281 b = rat(2, 5)
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 l = [a+b, a-b, a*b, a/b]
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 print l
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 l.sort()
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 print l
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
286 print rat(0, 1)
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 print a+1
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 print a+1L
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
289 print a+1.0
1371
faaf3843b8bd Add coercions
Guido van Rossum <guido@python.org>
parents: 945
diff changeset
290 try:
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
291 print rat(1, 0)
1371
faaf3843b8bd Add coercions
Guido van Rossum <guido@python.org>
parents: 945
diff changeset
292 raise SystemError, 'should have been ZeroDivisionError'
faaf3843b8bd Add coercions
Guido van Rossum <guido@python.org>
parents: 945
diff changeset
293 except ZeroDivisionError:
faaf3843b8bd Add coercions
Guido van Rossum <guido@python.org>
parents: 945
diff changeset
294 print 'OK'
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
295 print rat(2), rat(1.5), rat(3, 2), rat(1.5+1.5j), rat(31415926,10000000)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
296 list = [2, 1.5, rat(3,2), 1.5+1.5j]
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
297 for i in list:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
298 print i,
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
299 if type(i) is not ComplexType:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
300 print int(i), float(i),
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
301 print complex(i)
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
302 print
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
303 for j in list:
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
304 print i + j, i - j, i * j, i / j, i ** j, cmp(i, j)
945
465b9841770e Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
305
5503
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
306 if __name__ == '__main__':
ba005e4db4c5 A completely new Rat.py by Sjoerd.
Guido van Rossum <guido@python.org>
parents: 1966
diff changeset
307 test()