-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinteger.py
96 lines (73 loc) · 1.5 KB
/
integer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# integer.py
# created by Kaiwen Xu
#
# module related with integers
import math
class IntegerNumber:
"""Integer number generator (non-stop).
"""
def __init__(self, start=0):
"""Arguments:
start -- the number starts from (default 0)
"""
if isInt(start):
self.gen = start
self.start = start
else:
raise ValueError("Start number must be an integer.")
def __iter__(self):
return self
def next(self):
"""Return next integer.
"""
self.gen += 1
return (self.gen - 1)
def reset(self, start=None):
"""Reset generator.
Arguments:
start -- if not set, reset to the start number which initialized with
(default None)
"""
if start is None:
self.gen = self.start
else:
if isInt(start):
self.gen = start
self.start = start
else:
raise ValueError("Start number must be an integer.")
class EvenNumber(IntegerNumber):
def next(self):
"""Return next even integer.
"""
self.gen += 2
if not isEven(self.gen):
self.gen += 1
return (self.gen - 2)
class OddNumber(IntegerNumber):
def next(self):
"""Return next odd integer.
"""
self.gen += 2
if not isOdd(self.gen):
self.gen += 1
return (self.gen - 2)
def isInt(f):
try:
i = int(f)
except:
return False
if i == f:
return True
else:
return False
def isSqrtInt(f):
if isInt(f) and isInt(math.sqrt(f)):
return True
else:
return False
def isEven(n):
return n % 2 == 0
def isOdd(n):
return n & 2 != 0
getBinStr = lambda x: x > 0 and str(bin(x))[2:] or "-" + str(bin(x))[3:]