Skip to content

Commit bf066d4

Browse files
Add Disarium number checker implementation
Introduces is_disarium_number function to check if a number is a Disarium number, including input validation and doctests for various cases.
1 parent 3cea941 commit bf066d4

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
"""
2+
A number n is said to be a Disarium number if
3+
the sum of its digits powered to their respective positions equals the number itself.
4+
5+
Examples of Disarium Numbers: 1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, ...
6+
"""
7+
8+
def is_disarium_number(number: int) -> bool:
9+
"""
10+
This function takes an integer number as input.
11+
Returns True if the number is a Disarium number.
12+
13+
>>> is_disarium_number(-1)
14+
False
15+
>>> is_disarium_number(0)
16+
False
17+
>>> is_disarium_number(1)
18+
True
19+
>>> is_disarium_number(89)
20+
True
21+
>>> is_disarium_number(135)
22+
True
23+
>>> is_disarium_number(175)
24+
True
25+
>>> is_disarium_number(518)
26+
True
27+
>>> is_disarium_number(598)
28+
True
29+
>>> is_disarium_number(123)
30+
False
31+
>>> is_disarium_number(89.0)
32+
Traceback (most recent call last):
33+
...
34+
TypeError: Input value of [number=89.0] must be an integer
35+
"""
36+
if not isinstance(number, int):
37+
msg = f"Input value of [number={number}] must be an integer"
38+
raise TypeError(msg)
39+
if number < 1:
40+
return False
41+
42+
digits = str(number)
43+
total = sum(int(digit) ** (idx + 1) for idx, digit in enumerate(digits))
44+
return total == number
45+
46+
if __name__ == "__main__":
47+
import doctest
48+
doctest.testmod()

0 commit comments

Comments
 (0)