Skip to content

Commit 3913a39

Browse files
checked
1 parent 6deb893 commit 3913a39

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

Diff for: maths/series/geometric_mean.py

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
"""
2+
GEOMETRIC MEAN : https://en.wikipedia.org/wiki/Geometric_mean
3+
"""
4+
5+
6+
def is_geometric_series(series: list) -> bool:
7+
"""
8+
checking whether the input series is geometric series or not
9+
10+
>>> is_geometric_series([2, 4, 8])
11+
True
12+
>>> is_geometric_series([3, 6, 12, 24])
13+
True
14+
>>> is_geometric_series([1, 2, 3])
15+
False
16+
>>> is_geometric_series([0, 0, 3])
17+
False
18+
19+
"""
20+
if len(series) == 1:
21+
return True
22+
try:
23+
common_ratio = series[1] / series[0]
24+
for index in range(len(series) - 1):
25+
if series[index + 1] / series[index] != common_ratio:
26+
return False
27+
except ZeroDivisionError:
28+
return False
29+
return True
30+
31+
32+
def geometric_mean(series: list) -> float:
33+
"""
34+
return the geometric mean of series
35+
36+
>>> geometric_mean([2, 4, 8])
37+
3.9999999999999996
38+
>>> geometric_mean([3, 6, 12, 24])
39+
8.48528137423857
40+
>>> geometric_mean([4, 8, 16])
41+
7.999999999999999
42+
>>> geometric_mean(4)
43+
Traceback (most recent call last):
44+
...
45+
ValueError: Input series is not valid, valid series - [2, 4, 8]
46+
>>> geometric_mean([1, 2, 3])
47+
Traceback (most recent call last):
48+
...
49+
ValueError: Input list is not a geometric series
50+
>>> geometric_mean([0, 2, 3])
51+
Traceback (most recent call last):
52+
...
53+
ValueError: Input list is not a geometric series
54+
>>> geometric_mean([])
55+
Traceback (most recent call last):
56+
...
57+
ValueError: Input list must be a non empty list
58+
59+
"""
60+
if not isinstance(series, list):
61+
raise ValueError("Input series is not valid, valid series - [2, 4, 8]")
62+
if len(series) == 0:
63+
raise ValueError("Input list must be a non empty list")
64+
if not is_geometric_series(series):
65+
raise ValueError("Input list is not a geometric series")
66+
answer = 1
67+
for value in series:
68+
answer *= value
69+
return pow(answer, 1 / len(series))
70+
71+
72+
if __name__ == "__main__":
73+
import doctest
74+
75+
doctest.testmod()

0 commit comments

Comments
 (0)