-
Notifications
You must be signed in to change notification settings - Fork 0
/
Counter.py
54 lines (44 loc) · 1.33 KB
/
Counter.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
import sys
from numpy.random import choice
class Counter:
def __init__(self, name, max_count):
if max_count <= 0:
raise Exception('max count of a counter must be at least 1')
self._name = name
self._max_count = max_count
self._counter = 0
def increment(self):
assert self._counter >= 0, 'Negative count detected!'
if self._counter < self._max_count:
self._counter += 1
else:
print('error Counter max')
def value(self):
return self._counter
def __str__(self):
return self._name + ': ' + str(self._counter)
def __eq__(self, other):
return self._counter == other._counter
def __ne__(self, other):
return self._counter != other._counter
if __name__ == "__main__":
# a = Counter('ewrw', 10)
# a.increment()
# print(a)
# a._counter = -1
# a.increment()
# print(a)
def coin_toss(prob=0.5):
probs = [prob, 1 - prob]
return choice(range(2), size=1, p=probs)[0]
n = int(sys.argv[1])
p = float(sys.argv[2])
head = Counter('heads', n)
tail = Counter('tails', n)
for i in range(n):
if coin_toss(p) == 0:
head.increment()
else:
tail.increment()
print(head, tail, head != tail)
a = Counter('ewrwer', 1)