Commit 39b71c22 authored by Andrew M. Kuchling's avatar Andrew M. Kuchling

Modernize code by using isinstance() instead of type() checks

parent 3ef1894b
...@@ -28,10 +28,10 @@ def gcd(a, b): ...@@ -28,10 +28,10 @@ def gcd(a, b):
def rat(num, den = 1): def rat(num, den = 1):
# must check complex before float # must check complex before float
if type(num) is ComplexType or type(den) is ComplexType: if isinstance(num, complex) or isinstance(den, complex):
# numerator or denominator is complex: return a complex # numerator or denominator is complex: return a complex
return complex(num) / complex(den) return complex(num) / complex(den)
if type(num) is FloatType or type(den) is FloatType: if isinstance(num, float) or isinstance(den, float):
# numerator or denominator is float: return a float # numerator or denominator is float: return a float
return float(num) / float(den) return float(num) / float(den)
# otherwise return a rational # otherwise return a rational
...@@ -47,28 +47,26 @@ class Rat: ...@@ -47,28 +47,26 @@ class Rat:
# normalize # normalize
# must check complex before float # must check complex before float
if type(num) is ComplexType or type(den) is ComplexType: if (isinstance(num, complex) or
isinstance(den, complex)):
# numerator or denominator is complex: # numerator or denominator is complex:
# normalized form has denominator == 1+0j # normalized form has denominator == 1+0j
self.__num = complex(num) / complex(den) self.__num = complex(num) / complex(den)
self.__den = complex(1) self.__den = complex(1)
return return
if type(num) is FloatType or type(den) is FloatType: if isinstance(num, float) or isinstance(den, float):
# numerator or denominator is float: # numerator or denominator is float:
# normalized form has denominator == 1.0 # normalized form has denominator == 1.0
self.__num = float(num) / float(den) self.__num = float(num) / float(den)
self.__den = 1.0 self.__den = 1.0
return return
if (type(num) is InstanceType and if (isinstance(num, self.__class__) or
num.__class__ is self.__class__) or \ isinstance(den, self.__class__)):
(type(den) is InstanceType and
den.__class__ is self.__class__):
# numerator or denominator is rational # numerator or denominator is rational
new = num / den new = num / den
if type(new) is not InstanceType or \ if not isinstance(new, self.__class__):
new.__class__ is not self.__class__:
self.__num = new self.__num = new
if type(new) is ComplexType: if isinstance(new, complex):
self.__den = complex(1) self.__den = complex(1)
else: else:
self.__den = 1.0 self.__den = 1.0
...@@ -165,11 +163,11 @@ class Rat: ...@@ -165,11 +163,11 @@ class Rat:
# a ** b # a ** b
def __pow__(a, b): def __pow__(a, b):
if b.__den != 1: if b.__den != 1:
if type(a.__num) is ComplexType: if isinstance(a.__num, complex):
a = complex(a) a = complex(a)
else: else:
a = float(a) a = float(a)
if type(b.__num) is ComplexType: if isinstance(b.__num, complex):
b = complex(b) b = complex(b)
else: else:
b = float(b) b = float(b)
...@@ -296,14 +294,14 @@ def test(): ...@@ -296,14 +294,14 @@ def test():
list = [2, 1.5, rat(3,2), 1.5+1.5j] list = [2, 1.5, rat(3,2), 1.5+1.5j]
for i in list: for i in list:
print i, print i,
if type(i) is not ComplexType: if not isinstance(i, complex):
print int(i), float(i), print int(i), float(i),
print complex(i) print complex(i)
print print
for j in list: for j in list:
print i + j, i - j, i * j, i / j, i ** j, print i + j, i - j, i * j, i / j, i ** j,
if not (isinstance(i, ComplexType) or if not (isinstance(i, complex) or
isinstance(j, ComplexType)): isinstance(j, complex)):
print cmp(i, j) print cmp(i, j)
print print
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment