From 19ccc522e21a1db997a337b9d12ff01026e2ebed Mon Sep 17 00:00:00 2001 From: Kelvin W <87421436+kelvinwaringa@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:21:48 +0300 Subject: [PATCH 1/4] Add division.py with input validation for zero denominator - Create maths/division.py with divide_numbers() function - Add explicit validation for zero denominator - Include comprehensive docstring with examples - Add doctests for various cases including error handling - Follow repository coding standards with type hints Fixes #13845 --- maths/division.py | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 maths/division.py diff --git a/maths/division.py b/maths/division.py new file mode 100644 index 000000000000..2b22b0fde6be --- /dev/null +++ b/maths/division.py @@ -0,0 +1,68 @@ +""" +This module provides a division function with input validation. + +The divide_numbers function performs division between two numbers +with explicit validation for zero denominators, providing clearer +error messages for educational purposes. +""" + + +def divide_numbers(a: float, b: float) -> float: + """ + Divide two numbers with validation for zero denominator. + + This function performs division between two numbers and includes + explicit validation to prevent division by zero, providing a + user-friendly error message that is especially helpful for + beginners learning about error handling. + + Args: + a: The dividend (numerator) - the number to be divided. + b: The divisor (denominator) - the number to divide by. + + Returns: + The result of dividing a by b. + + Raises: + ValueError: If b (denominator) is zero. + + Examples: + >>> divide_numbers(10, 2) + 5.0 + + >>> divide_numbers(15, 3) + 5.0 + + >>> divide_numbers(-10, 2) + -5.0 + + >>> divide_numbers(7, 2) + 3.5 + + >>> divide_numbers(10, 0) + Traceback (most recent call last): + ... + ValueError: Cannot divide by zero. Please provide a non-zero denominator. + + >>> divide_numbers(0, 5) + 0.0 + """ + if b == 0: + raise ValueError("Cannot divide by zero. Please provide a non-zero denominator.") + return a / b + + +if __name__ == "__main__": + # Example usage + print("Division Examples:") + print(f"10 / 2 = {divide_numbers(10, 2)}") + print(f"15 / 3 = {divide_numbers(15, 3)}") + print(f"-10 / 2 = {divide_numbers(-10, 2)}") + print(f"7 / 2 = {divide_numbers(7, 2)}") + print(f"0 / 5 = {divide_numbers(0, 5)}") + + # Test zero division error + try: + divide_numbers(10, 0) + except ValueError as e: + print(f"Error caught: {e}") From f1817b5a14f9b40133be742a597301b4c5477eca Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 17 Nov 2025 15:24:15 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- maths/division.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/maths/division.py b/maths/division.py index 2b22b0fde6be..883dbcf96b88 100644 --- a/maths/division.py +++ b/maths/division.py @@ -48,7 +48,9 @@ def divide_numbers(a: float, b: float) -> float: 0.0 """ if b == 0: - raise ValueError("Cannot divide by zero. Please provide a non-zero denominator.") + raise ValueError( + "Cannot divide by zero. Please provide a non-zero denominator." + ) return a / b @@ -60,7 +62,7 @@ def divide_numbers(a: float, b: float) -> float: print(f"-10 / 2 = {divide_numbers(-10, 2)}") print(f"7 / 2 = {divide_numbers(7, 2)}") print(f"0 / 5 = {divide_numbers(0, 5)}") - + # Test zero division error try: divide_numbers(10, 0) From 616dcd4edec0ec13663e1ee6f9889ca39f01d6da Mon Sep 17 00:00:00 2001 From: Kelvin W <87421436+kelvinwaringa@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:27:26 +0300 Subject: [PATCH 3/4] Fix linting errors: remove whitespace and fix line length - Fix E501: Break long line in docstring to stay within 88 chars - Fix W293: Remove trailing whitespace from blank lines --- maths/division.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/maths/division.py b/maths/division.py index 883dbcf96b88..a3bd05d5e608 100644 --- a/maths/division.py +++ b/maths/division.py @@ -42,7 +42,8 @@ def divide_numbers(a: float, b: float) -> float: >>> divide_numbers(10, 0) Traceback (most recent call last): ... - ValueError: Cannot divide by zero. Please provide a non-zero denominator. + ValueError: Cannot divide by zero. Please provide a non-zero + denominator. >>> divide_numbers(0, 5) 0.0 From d2d1407d77faa15e1b2af3ffa9b10c2b41511656 Mon Sep 17 00:00:00 2001 From: Kelvin W <87421436+kelvinwaringa@users.noreply.github.com> Date: Mon, 17 Nov 2025 18:30:50 +0300 Subject: [PATCH 4/4] Use descriptive parameter names: numerator and denominator - Rename parameter 'a' to 'numerator' for clarity - Rename parameter 'b' to 'denominator' for clarity - Update all references in function body and docstring --- maths/division.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/maths/division.py b/maths/division.py index a3bd05d5e608..9840a2341c61 100644 --- a/maths/division.py +++ b/maths/division.py @@ -7,7 +7,7 @@ """ -def divide_numbers(a: float, b: float) -> float: +def divide_numbers(numerator: float, denominator: float) -> float: """ Divide two numbers with validation for zero denominator. @@ -17,14 +17,14 @@ def divide_numbers(a: float, b: float) -> float: beginners learning about error handling. Args: - a: The dividend (numerator) - the number to be divided. - b: The divisor (denominator) - the number to divide by. + numerator: The dividend - the number to be divided. + denominator: The divisor - the number to divide by. Returns: - The result of dividing a by b. + The result of dividing numerator by denominator. Raises: - ValueError: If b (denominator) is zero. + ValueError: If denominator is zero. Examples: >>> divide_numbers(10, 2) @@ -48,11 +48,11 @@ def divide_numbers(a: float, b: float) -> float: >>> divide_numbers(0, 5) 0.0 """ - if b == 0: + if denominator == 0: raise ValueError( "Cannot divide by zero. Please provide a non-zero denominator." ) - return a / b + return numerator / denominator if __name__ == "__main__":