TheAlgorithms-Python
83 строки · 2.3 Кб
1"""
2Geometric Mean
3Reference : https://en.wikipedia.org/wiki/Geometric_mean
4
5Geometric series
6Reference: https://en.wikipedia.org/wiki/Geometric_series
7"""
8
9
10def is_geometric_series(series: list) -> bool:
11"""
12checking whether the input series is geometric series or not
13>>> is_geometric_series([2, 4, 8])
14True
15>>> is_geometric_series([3, 6, 12, 24])
16True
17>>> is_geometric_series([1, 2, 3])
18False
19>>> is_geometric_series([0, 0, 3])
20False
21>>> is_geometric_series([])
22Traceback (most recent call last):
23...
24ValueError: Input list must be a non empty list
25>>> is_geometric_series(4)
26Traceback (most recent call last):
27...
28ValueError: Input series is not valid, valid series - [2, 4, 8]
29"""
30if not isinstance(series, list):
31raise ValueError("Input series is not valid, valid series - [2, 4, 8]")
32if len(series) == 0:
33raise ValueError("Input list must be a non empty list")
34if len(series) == 1:
35return True
36try:
37common_ratio = series[1] / series[0]
38for index in range(len(series) - 1):
39if series[index + 1] / series[index] != common_ratio:
40return False
41except ZeroDivisionError:
42return False
43return True
44
45
46def geometric_mean(series: list) -> float:
47"""
48return the geometric mean of series
49
50>>> geometric_mean([2, 4, 8])
513.9999999999999996
52>>> geometric_mean([3, 6, 12, 24])
538.48528137423857
54>>> geometric_mean([4, 8, 16])
557.999999999999999
56>>> geometric_mean(4)
57Traceback (most recent call last):
58...
59ValueError: Input series is not valid, valid series - [2, 4, 8]
60>>> geometric_mean([1, 2, 3])
611.8171205928321397
62>>> geometric_mean([0, 2, 3])
630.0
64>>> geometric_mean([])
65Traceback (most recent call last):
66...
67ValueError: Input list must be a non empty list
68
69"""
70if not isinstance(series, list):
71raise ValueError("Input series is not valid, valid series - [2, 4, 8]")
72if len(series) == 0:
73raise ValueError("Input list must be a non empty list")
74answer = 1
75for value in series:
76answer *= value
77return pow(answer, 1 / len(series))
78
79
80if __name__ == "__main__":
81import doctest
82
83doctest.testmod()
84