Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions maths/series/alternate_harmonic_series.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
def is_alternate_harmonic_series(series: list) -> bool:
"""
checking whether the input series is alternate harmonic series or not
>>> is_alternate_harmonic_series([1, -1/2, 1/3, -1/4, 1/5])
True
>>> is_alternate_harmonic_series([2/5, -2/10, 2/15, -2/20, 2/25])
True
>>> is_alternate_harmonic_series([1, 1/2, 1/3, 1/4])
False
>>> is_alternate_harmonic_series([1, -1/2, 1/4, -1/8])
False
>>> is_alternate_harmonic_series(4)
Traceback (most recent call last):
...
ValueError: Input series is not valid, valid series - [1, 2/3, 2]
>>> is_alternate_harmonic_series([])
Traceback (most recent call last):
...
ValueError: Input list must be a non empty list
>>> is_alternate_harmonic_series([0])
Traceback (most recent call last):
...
ValueError: Input series cannot have 0 as an element
>>> is_alternate_harmonic_series([1,2,0,6])
Traceback (most recent call last):
...
ValueError: Input series cannot have 0 as an element
"""
if not isinstance(series, list):
raise ValueError("Input series is not valid, valid series - [1, 2/3, 2]")
if len(series) == 0:
raise ValueError("Input list must be a non empty list")
if len(series) == 1 and series[0] != 0:
return True
receprocal = []
series_len = len(series)
for i in range(series_len):
if series[i] == 0:
raise ValueError("Input series cannot have 0 as an element")
receprocal.append(1 / series[i])
common_diff = abs(receprocal[1]) - abs(receprocal[0])
for index in range(2, series_len):
if (
abs(receprocal[index]) - abs(receprocal[index - 1]) != common_diff
or receprocal[index] * receprocal[index - 1] >= 0
):
return False
return True


if __name__ == "__main__":
import doctest

doctest.testmod()