From ff09802015c98fe036684eb62ea84972486ac392 Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Wed, 18 Oct 2023 12:02:33 +0530 Subject: [PATCH 01/11] Added new tests! --- maths/power_using_recursion.py | 74 +++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py index e82635ba0005..f5e2a8987243 100644 --- a/maths/power_using_recursion.py +++ b/maths/power_using_recursion.py @@ -11,43 +11,61 @@ Output --> 2 to the power of 0 is 1 """ +import pytest def power(base: int, exponent: int) -> float: """ - >>> power(3, 4) + Calculate the power of a base raised to an exponent. + + Examples: + >>> power(3, 4) # Positive exponent 81 - >>> power(2, 0) + >>> power(2, 0) # Zero exponent 1 + >>> power(5, -3) # Negative exponent + 0.008 >>> all(power(base, exponent) == pow(base, exponent) - ... for base in range(-10, 10) for exponent in range(10)) + ...     for base in range(-10, 10) for exponent in range(10)) # Check against built-in pow() function True - >>> power('a', 1) - 'a' - >>> power('a', 2) - Traceback (most recent call last): - ... - TypeError: can't multiply sequence by non-int of type 'str' - >>> power('a', 'b') - Traceback (most recent call last): - ... - TypeError: unsupported operand type(s) for -: 'str' and 'int' - >>> power(2, -1) - Traceback (most recent call last): - ... - RecursionError: maximum recursion depth exceeded """ - return base * power(base, (exponent - 1)) if exponent else 1 + if exponent == 0: + return 1 + elif exponent < 0: + return 1 / power(base, -exponent) + else: + return base * power(base, exponent - 1) + + +@pytest.mark.parametrize("base, exponent", [(1, 2), (2, 3), (3, 4)]) +def test_power_positive_exponent(base, exponent): + assert power(base, exponent) == pow(base, exponent) + + +@pytest.mark.parametrize("base, exponent", [(1, -2), (2, -3), (3, -4)]) +def test_power_negative_exponent(base, exponent): + assert power(base, exponent) == 1 / pow(base, -exponent) + + +def test_power_zero_exponent(): + assert power(1, 0) == 1 + assert power(2, 0) == 1 + assert power(3, 0) == 1 + + +def test_power_with_non_integer_exponent(): + assert power(2, 0.5) == pytest.approx(1.4142135623730951) + assert power(5, -1.5) == pytest.approx(0.4) + assert power(3, 1.3) == pytest.approx(5.916079783099617) + +def test_power_raises_type_error(): + with pytest.raises(TypeError): + power("abc", 2) + with pytest.raises(TypeError): + power(2, "def") -if __name__ == "__main__": - from doctests import testmod - testmod() - print("Raise base to the power of exponent using recursion...") - base = int(input("Enter the base: ").strip()) - exponent = int(input("Enter the exponent: ").strip()) - result = power(base, abs(exponent)) - if exponent < 0: # power() does not properly deal w/ negative exponents - result = 1 / result - print(f"{base} to the power of {exponent} is {result}") +def test_power_raises_value_error(): + with pytest.raises(ValueError): + power(2, -10) From c605c660fd7c971aa7a58218df2f258980a7e5c5 Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Wed, 18 Oct 2023 12:03:25 +0530 Subject: [PATCH 02/11] [ADD]: Inproved Tests --- maths/power_using_recursion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py index f5e2a8987243..844a8430cdeb 100644 --- a/maths/power_using_recursion.py +++ b/maths/power_using_recursion.py @@ -67,5 +67,5 @@ def test_power_raises_type_error(): def test_power_raises_value_error(): - with pytest.raises(ValueError): + witSh pytest.raises(ValueError): power(2, -10) From 9780df114139ad1f38718b7e5ba2e06f2f0a3ae7 Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Wed, 18 Oct 2023 12:28:41 +0530 Subject: [PATCH 03/11] fixed --- maths/power_using_recursion.py | 46 ++++++---------------------------- 1 file changed, 8 insertions(+), 38 deletions(-) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py index 844a8430cdeb..680e07ea7b49 100644 --- a/maths/power_using_recursion.py +++ b/maths/power_using_recursion.py @@ -11,7 +11,6 @@ Output --> 2 to the power of 0 is 1 """ -import pytest def power(base: int, exponent: int) -> float: @@ -19,14 +18,12 @@ def power(base: int, exponent: int) -> float: Calculate the power of a base raised to an exponent. Examples: - >>> power(3, 4) # Positive exponent + >>> power(3, 4) 81 - >>> power(2, 0) # Zero exponent + >>> power(2, 0) 1 - >>> power(5, -3) # Negative exponent - 0.008 >>> all(power(base, exponent) == pow(base, exponent) - ...     for base in range(-10, 10) for exponent in range(10)) # Check against built-in pow() function + ...     for base in range(-10, 10) for exponent in range(10)) True """ if exponent == 0: @@ -37,35 +34,8 @@ def power(base: int, exponent: int) -> float: return base * power(base, exponent - 1) -@pytest.mark.parametrize("base, exponent", [(1, 2), (2, 3), (3, 4)]) -def test_power_positive_exponent(base, exponent): - assert power(base, exponent) == pow(base, exponent) - - -@pytest.mark.parametrize("base, exponent", [(1, -2), (2, -3), (3, -4)]) -def test_power_negative_exponent(base, exponent): - assert power(base, exponent) == 1 / pow(base, -exponent) - - -def test_power_zero_exponent(): - assert power(1, 0) == 1 - assert power(2, 0) == 1 - assert power(3, 0) == 1 - - -def test_power_with_non_integer_exponent(): - assert power(2, 0.5) == pytest.approx(1.4142135623730951) - assert power(5, -1.5) == pytest.approx(0.4) - assert power(3, 1.3) == pytest.approx(5.916079783099617) - - -def test_power_raises_type_error(): - with pytest.raises(TypeError): - power("abc", 2) - with pytest.raises(TypeError): - power(2, "def") - - -def test_power_raises_value_error(): - witSh pytest.raises(ValueError): - power(2, -10) +if __name__ == "__main__": + base = int(input("Enter the base: ").strip()) + exponent = int(input("Enter the exponent: ").strip()) + result = power(base, exponent) + print(f"{base} to the power of {exponent} is {result}") From 35aca479d0b85c7a92b3f9958eb3f4525dbfe727 Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Thu, 19 Oct 2023 02:34:09 +0530 Subject: [PATCH 04/11] Removed spaces --- maths/power_using_recursion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py index 680e07ea7b49..5b91ac69976f 100644 --- a/maths/power_using_recursion.py +++ b/maths/power_using_recursion.py @@ -23,7 +23,7 @@ def power(base: int, exponent: int) -> float: >>> power(2, 0) 1 >>> all(power(base, exponent) == pow(base, exponent) - ...     for base in range(-10, 10) for exponent in range(10)) + ...for base in range(-10, 10) for exponent in range(10)) True """ if exponent == 0: From 0c5eb560b714a01a7b216944513012aa887fa5dd Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Thu, 19 Oct 2023 03:30:38 +0530 Subject: [PATCH 05/11] Changed the file name --- maths/{power_using_recursion.py => power_recursion.py} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename maths/{power_using_recursion.py => power_recursion.py} (100%) diff --git a/maths/power_using_recursion.py b/maths/power_recursion.py similarity index 100% rename from maths/power_using_recursion.py rename to maths/power_recursion.py From 3c7ee47436b35152847000da47e9616e493bb23f Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Thu, 19 Oct 2023 03:50:25 +0530 Subject: [PATCH 06/11] Added Changes --- maths/power_recursion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/power_recursion.py b/maths/power_recursion.py index 5b91ac69976f..8baa746cb439 100644 --- a/maths/power_recursion.py +++ b/maths/power_recursion.py @@ -23,7 +23,7 @@ def power(base: int, exponent: int) -> float: >>> power(2, 0) 1 >>> all(power(base, exponent) == pow(base, exponent) - ...for base in range(-10, 10) for exponent in range(10)) + ... for base in range(-10, 10) for exponent in range(10)) True """ if exponent == 0: From 07fb30013d6c16fbae232f9ad4ac573f4d6b3d3b Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Thu, 19 Oct 2023 09:24:40 +0530 Subject: [PATCH 07/11] changed the code and kept the test cases --- ...wer_recursion.py => power_using_recursion.py} | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) rename maths/{power_recursion.py => power_using_recursion.py} (71%) diff --git a/maths/power_recursion.py b/maths/power_using_recursion.py similarity index 71% rename from maths/power_recursion.py rename to maths/power_using_recursion.py index 8baa746cb439..e9c3c4445e8a 100644 --- a/maths/power_recursion.py +++ b/maths/power_using_recursion.py @@ -26,16 +26,18 @@ def power(base: int, exponent: int) -> float: ... for base in range(-10, 10) for exponent in range(10)) True """ - if exponent == 0: - return 1 - elif exponent < 0: - return 1 / power(base, -exponent) - else: - return base * power(base, exponent - 1) + return base * power(base, (exponent - 1)) if exponent else 1 if __name__ == "__main__": + from doctests import testmod + + testmod() + print("Raise base to the power of exponent using recursion...") base = int(input("Enter the base: ").strip()) exponent = int(input("Enter the exponent: ").strip()) - result = power(base, exponent) + result = power(base, abs(exponent)) + if exponent < 0: # power() does not properly deal w/ negative exponents + result = 1 / result print(f"{base} to the power of {exponent} is {result}") + From 290efe86c754476b0aabf8ef98c30053563a1f1d Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Thu, 19 Oct 2023 09:24:53 +0530 Subject: [PATCH 08/11] changed the code and kept the test cases --- maths/power_using_recursion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py index e9c3c4445e8a..93e66d5fba53 100644 --- a/maths/power_using_recursion.py +++ b/maths/power_using_recursion.py @@ -31,7 +31,7 @@ def power(base: int, exponent: int) -> float: if __name__ == "__main__": from doctests import testmod - +Sa testmod() print("Raise base to the power of exponent using recursion...") base = int(input("Enter the base: ").strip()) From 0dd5a3cb4e9c1df83dc6371353633f08b55b4ea7 Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Thu, 19 Oct 2023 09:25:19 +0530 Subject: [PATCH 09/11] missed the line --- maths/power_using_recursion.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py index 93e66d5fba53..e9c3c4445e8a 100644 --- a/maths/power_using_recursion.py +++ b/maths/power_using_recursion.py @@ -31,7 +31,7 @@ def power(base: int, exponent: int) -> float: if __name__ == "__main__": from doctests import testmod -Sa + testmod() print("Raise base to the power of exponent using recursion...") base = int(input("Enter the base: ").strip()) From dc817c69db1a8543a7d5f6fd02cc1abc2fbca71e Mon Sep 17 00:00:00 2001 From: Saptadeep Banerjee Date: Thu, 19 Oct 2023 09:27:21 +0530 Subject: [PATCH 10/11] removed spaces --- maths/power_using_recursion.py | 1 - 1 file changed, 1 deletion(-) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py index e9c3c4445e8a..a3ec6d958650 100644 --- a/maths/power_using_recursion.py +++ b/maths/power_using_recursion.py @@ -40,4 +40,3 @@ def power(base: int, exponent: int) -> float: if exponent < 0: # power() does not properly deal w/ negative exponents result = 1 / result print(f"{base} to the power of {exponent} is {result}") - From 681e02a5329ef409c68b9048f937851493d943a6 Mon Sep 17 00:00:00 2001 From: Christian Clauss Date: Fri, 20 Oct 2023 06:25:54 +0200 Subject: [PATCH 11/11] Update power_using_recursion.py --- maths/power_using_recursion.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/maths/power_using_recursion.py b/maths/power_using_recursion.py index a3ec6d958650..462fc45bff64 100644 --- a/maths/power_using_recursion.py +++ b/maths/power_using_recursion.py @@ -17,7 +17,6 @@ def power(base: int, exponent: int) -> float: """ Calculate the power of a base raised to an exponent. - Examples: >>> power(3, 4) 81 >>> power(2, 0) @@ -25,6 +24,20 @@ def power(base: int, exponent: int) -> float: >>> all(power(base, exponent) == pow(base, exponent) ... for base in range(-10, 10) for exponent in range(10)) True + >>> power('a', 1) + 'a' + >>> power('a', 2) + Traceback (most recent call last): + ... + TypeError: can't multiply sequence by non-int of type 'str' + >>> power('a', 'b') + Traceback (most recent call last): + ... + TypeError: unsupported operand type(s) for -: 'str' and 'int' + >>> power(2, -1) + Traceback (most recent call last): + ... + RecursionError: maximum recursion depth exceeded """ return base * power(base, (exponent - 1)) if exponent else 1