Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tests for Perfect_Number #10745

Merged
merged 36 commits into from
Oct 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ff09802
Added new tests!
imSanko Oct 18, 2023
c605c66
[ADD]: Inproved Tests
imSanko Oct 18, 2023
9780df1
fixed
imSanko Oct 18, 2023
35aca47
Removed spaces
imSanko Oct 18, 2023
0c5eb56
Changed the file name
imSanko Oct 18, 2023
3c7ee47
Added Changes
imSanko Oct 18, 2023
07fb300
changed the code and kept the test cases
imSanko Oct 19, 2023
290efe8
changed the code and kept the test cases
imSanko Oct 19, 2023
0dd5a3c
missed the line
imSanko Oct 19, 2023
dc817c6
removed spaces
imSanko Oct 19, 2023
3e51abd
Merge branch 'TheAlgorithms:master' into master
imSanko Oct 19, 2023
681e02a
Update power_using_recursion.py
cclauss Oct 20, 2023
ac4b1f0
Merge branch 'TheAlgorithms:master' into master
imSanko Oct 20, 2023
c53e78c
Added new tests in Signum
imSanko Oct 20, 2023
d89a0b9
Few things added
imSanko Oct 20, 2023
6d2f1c3
Removed few stuff and added few changes
imSanko Oct 20, 2023
786f1a6
Fixed few things
imSanko Oct 20, 2023
e31687b
Reverted the function
imSanko Oct 20, 2023
9daac1a
Update maths/signum.py
imSanko Oct 20, 2023
27b9c8a
Added few things
imSanko Oct 20, 2023
6714d15
Update maths/signum.py
imSanko Oct 20, 2023
b4ea39f
Added the type hint back
imSanko Oct 20, 2023
0b0a390
Update signum.py
cclauss Oct 20, 2023
05476d6
Added NEW tests for Perfect_Number
imSanko Oct 21, 2023
f4f6c62
Merge branch 'master' of https://github.com/imSanko/Python
imSanko Oct 21, 2023
1d42ec9
Update maths/special_numbers/perfect_number.py
imSanko Oct 21, 2023
75cb826
Added the line back
imSanko Oct 21, 2023
974130b
Update maths/special_numbers/perfect_number.py
imSanko Oct 21, 2023
e1a5b17
Fixed a space
imSanko Oct 21, 2023
6ad0257
Updated
imSanko Oct 21, 2023
48c7f4b
Reverted changes
imSanko Oct 21, 2023
6d23cbb
Added the old code and FIXED few LINES
imSanko Oct 21, 2023
5f1b8ae
Fixed few things
imSanko Oct 21, 2023
54fd69f
Changed Test CASES
imSanko Oct 21, 2023
01e81c4
Update perfect_number.py
cclauss Oct 21, 2023
a355f82
[pre-commit.ci] auto fixes from pre-commit.com hooks
pre-commit-ci[bot] Oct 21, 2023
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
77 changes: 77 additions & 0 deletions maths/perfect_number.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
"""
== Perfect Number ==
In number theory, a perfect number is a positive integer that is equal to the sum of
its positive divisors, excluding the number itself.
For example: 6 ==> divisors[1, 2, 3, 6]
Excluding 6, the sum(divisors) is 1 + 2 + 3 = 6
So, 6 is a Perfect Number

Other examples of Perfect Numbers: 28, 486, ...

https://en.wikipedia.org/wiki/Perfect_number
"""


def perfect(number: int) -> bool:
"""
Check if a number is a perfect number.

A perfect number is a positive integer that is equal to the sum of its proper
divisors (excluding itself).

Args:
number: The number to be checked.

Returns:
True if the number is a perfect number otherwise, False.
Start from 1 because dividing by 0 will raise ZeroDivisionError.
A number at most can be divisible by the half of the number except the number
itself. For example, 6 is at most can be divisible by 3 except by 6 itself.
Examples:
>>> perfect(27)
False
>>> perfect(28)
True
>>> perfect(29)
False
>>> perfect(6)
True
>>> perfect(12)
False
>>> perfect(496)
True
>>> perfect(8128)
True
>>> perfect(0)
False
>>> perfect(-1)
False
>>> perfect(12.34)
Traceback (most recent call last):
...
ValueError: number must an integer
>>> perfect("Hello")
Traceback (most recent call last):
...
ValueError: number must an integer
"""
if not isinstance(number, int):
raise ValueError("number must an integer")
if number <= 0:
return False
return sum(i for i in range(1, number // 2 + 1) if number % i == 0) == number


if __name__ == "__main__":
from doctest import testmod

testmod()
print("Program to check whether a number is a Perfect number or not...")
try:
number = int(input("Enter a positive integer: ").strip())
except ValueError:
msg = "number must an integer"
print(msg)
raise ValueError(msg)

print(f"{number} is {'' if perfect(number) else 'not '}a Perfect Number.")
29 changes: 25 additions & 4 deletions maths/special_numbers/perfect_number.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,37 @@

def perfect(number: int) -> bool:
"""
Check if a number is a perfect number.

A perfect number is a positive integer that is equal to the sum of its proper
divisors (excluding itself).

Args:
number: The number to be checked.

Returns:
True if the number is a perfect number, False otherwise.

Examples:
>>> perfect(27)
False
>>> perfect(28)
True
>>> perfect(29)
False

Start from 1 because dividing by 0 will raise ZeroDivisionError.
A number at most can be divisible by the half of the number except the number
itself. For example, 6 is at most can be divisible by 3 except by 6 itself.
imSanko marked this conversation as resolved.
Show resolved Hide resolved
>>> perfect(6)
True
>>> perfect(12)
False
>>> perfect(496)
True
>>> perfect(8128)
True
imSanko marked this conversation as resolved.
Show resolved Hide resolved
>>> perfect(0)
>>> perfect(-3)
>>> perfect(12.34)
>>> perfect("day")
>>> perfect(["call"])
"""
return sum(i for i in range(1, number // 2 + 1) if number % i == 0) == number

Expand Down
Loading