1
+ """
2
+ GEOMETRIC MEAN : https://en.wikipedia.org/wiki/Geometric_mean
3
+ """
4
+
5
+
1
6
def is_geometric_series (series : list ) -> bool :
2
7
"""
3
8
checking whether the input series is geometric series or not
@@ -8,14 +13,19 @@ def is_geometric_series(series: list) -> bool:
8
13
True
9
14
>>> is_geometric_series([1, 2, 3])
10
15
False
16
+ >>> is_geometric_series([0, 0, 3])
17
+ False
11
18
12
19
"""
13
20
if len (series ) == 1 :
14
21
return True
15
- common_ratio = series [1 ] / series [0 ]
16
- for index in range (len (series ) - 1 ):
17
- if series [index + 1 ] / series [index ] != common_ratio :
18
- return False
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
19
29
return True
20
30
21
31
@@ -29,23 +39,33 @@ def geometric_mean(series: list) -> float:
29
39
8.48528137423857
30
40
>>> geometric_mean([4, 8, 16])
31
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]
32
46
>>> geometric_mean([1, 2, 3])
33
47
Traceback (most recent call last):
34
48
...
35
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
36
54
>>> geometric_mean([])
37
55
Traceback (most recent call last):
38
56
...
39
57
ValueError: Input list must be a non empty list
40
58
41
59
"""
60
+ if not isinstance (series , list ):
61
+ raise ValueError ("Input series is not valid, valid series - [2, 4, 8]" )
42
62
if len (series ) == 0 :
43
63
raise ValueError ("Input list must be a non empty list" )
44
64
if not is_geometric_series (series ):
45
65
raise ValueError ("Input list is not a geometric series" )
46
66
answer = 1
47
- for _ in series :
48
- answer *= _
67
+ for value in series :
68
+ answer *= value
49
69
return pow (answer , 1 / len (series ))
50
70
51
71
0 commit comments