Skip to content

Commit

Permalink
adding a proper fractions algorithm (TheAlgorithms#11224)
Browse files Browse the repository at this point in the history
* adding a proper fractions algorithm

* Implementing suggestions in maths/numerical_analysis/proper_fractions.py

Co-authored-by: Christian Clauss <[email protected]>

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Implementing suggestions to proper_fractions.py

* Fixing ruff errors in proper_fractions.py

* Apply suggestions from code review

* ruff check --output-format=github .

* Update maths/numerical_analysis/proper_fractions.py

* Update proper_fractions.py

---------

Co-authored-by: Christian Clauss <[email protected]>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
  • Loading branch information
3 people authored Mar 20, 2024
1 parent 435309a commit 8faf823
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/workflows/ruff.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@ jobs:
steps:
- uses: actions/checkout@v4
- run: pip install --user ruff
- run: ruff --output-format=github .
- run: ruff check --output-format=github .
40 changes: 40 additions & 0 deletions maths/numerical_analysis/proper_fractions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
from math import gcd


def proper_fractions(denominator: int) -> list[str]:
"""
this algorithm returns a list of proper fractions, in the
range between 0 and 1, which can be formed with the given denominator
https://en.wikipedia.org/wiki/Fraction#Proper_and_improper_fractions
>>> proper_fractions(10)
['1/10', '3/10', '7/10', '9/10']
>>> proper_fractions(5)
['1/5', '2/5', '3/5', '4/5']
>>> proper_fractions(-15)
Traceback (most recent call last):
...
ValueError: The Denominator Cannot be less than 0
>>> proper_fractions(0)
[]
>>> proper_fractions(1.2)
Traceback (most recent call last):
...
ValueError: The Denominator must be an integer
"""

if denominator < 0:
raise ValueError("The Denominator Cannot be less than 0")
elif isinstance(denominator, float):
raise ValueError("The Denominator must be an integer")
return [
f"{numerator}/{denominator}"
for numerator in range(1, denominator)
if gcd(numerator, denominator) == 1
]


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

testmod()

0 comments on commit 8faf823

Please sign in to comment.