Skip to content

Commit ddd4023

Browse files
Devadeutpre-commit-ci[bot]cclauss
authored
Happy number (new algorithm) (#10864)
* Happy number (new algorithm) adding new algorithm * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update maths/special_numbers/happy_number.py Co-authored-by: Christian Clauss <cclauss@me.com> * Update happy_number.py added new changes * Update happy_number.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update happy_number.py * Update happy_number.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update happy_number.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update happy_number.py added ValueError part in code * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update happy_number.py modified and added raise Error code * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update happy_number.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Christian Clauss <cclauss@me.com>
1 parent ad9948d commit ddd4023

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

maths/special_numbers/happy_number.py

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
def is_happy_number(number: int) -> bool:
2+
"""
3+
A happy number is a number which eventually reaches 1 when replaced by the sum of
4+
the square of each digit.
5+
6+
:param number: The number to check for happiness.
7+
:return: True if the number is a happy number, False otherwise.
8+
9+
>>> is_happy_number(19)
10+
True
11+
>>> is_happy_number(2)
12+
False
13+
>>> is_happy_number(23)
14+
True
15+
>>> is_happy_number(1)
16+
True
17+
>>> is_happy_number(0)
18+
Traceback (most recent call last):
19+
...
20+
ValueError: number=0 must be a positive integer
21+
>>> is_happy_number(-19)
22+
Traceback (most recent call last):
23+
...
24+
ValueError: number=-19 must be a positive integer
25+
>>> is_happy_number(19.1)
26+
Traceback (most recent call last):
27+
...
28+
ValueError: number=19.1 must be a positive integer
29+
>>> is_happy_number("happy")
30+
Traceback (most recent call last):
31+
...
32+
ValueError: number='happy' must be a positive integer
33+
"""
34+
if not isinstance(number, int) or number <= 0:
35+
msg = f"{number=} must be a positive integer"
36+
raise ValueError(msg)
37+
38+
seen = set()
39+
while number != 1 and number not in seen:
40+
seen.add(number)
41+
number = sum(int(digit) ** 2 for digit in str(number))
42+
return number == 1
43+
44+
45+
if __name__ == "__main__":
46+
import doctest
47+
48+
doctest.testmod()

0 commit comments

Comments
 (0)