From a5987848d090d71e7aa7b08c6535fa95abbb56f3 Mon Sep 17 00:00:00 2001 From: Piero Date: Tue, 25 Nov 2025 17:52:37 +0100 Subject: [PATCH 01/13] feat: simple random positive int generator --- src/random_number.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/random_number.py b/src/random_number.py index 4a1dffe4..6634cd53 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -4,3 +4,13 @@ # Output: # The random number is: 4 # +import random +import sys + + +def random_number() -> int: + return random.randint(0, sys.maxsize) + + +if __name__ == "__main__": + print(random_number()) From af6dcd122cbfcf16081d628e6d76fe843c01a6e3 Mon Sep 17 00:00:00 2001 From: Piero Date: Tue, 25 Nov 2025 19:00:39 +0100 Subject: [PATCH 02/13] feat: added random generator with upper bound; --- src/random_number.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/random_number.py b/src/random_number.py index 6634cd53..3c0717dc 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -8,9 +8,31 @@ import sys -def random_number() -> int: +def random_positive_int() -> int: return random.randint(0, sys.maxsize) +# maybe limited_random... is a better name? +def random_limited_positive_int(upper_limit): + try: + assert isinstance(upper_limit, int) + except: + # for testing + # TODO: handle the exception gracefully + raise Exception("use integers only") + try: + assert upper_limit > 0 and upper_limit <= sys.maxsize + except: + # for testing + # TODO: handle the exception gracefully + raise Exception("Sorry, no numbers below or equal to zero") + return random.randint(0, upper_limit) + + +def main(): + print(random_positive_int()) + print(random_limited_positive_int(5)) + + if __name__ == "__main__": - print(random_number()) + main() From ecb2b6a201564683bd0f99267400c80441884fdf Mon Sep 17 00:00:00 2001 From: Piero Date: Tue, 25 Nov 2025 19:02:58 +0100 Subject: [PATCH 03/13] test: added test_random_number to test random_functions --- tests/test_random_number.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 tests/test_random_number.py diff --git a/tests/test_random_number.py b/tests/test_random_number.py new file mode 100644 index 00000000..7cb405ab --- /dev/null +++ b/tests/test_random_number.py @@ -0,0 +1,22 @@ +from src.random_number import * +import sys +import pytest + + +def test_random_number(): + random_int = random_positive_int() + assert isinstance(random_int, int) + assert random_int >= 0 and random_int <= sys.maxsize + + +@pytest.mark.parametrize("upper_limit", [0, -3, sys.maxsize, "a", 4.5, 5000, 1]) +def test_random_limited(upper_limit): + try: + random_limited_int = random_limited_positive_int(upper_limit) + assert isinstance(random_limited_int, int) + assert random_limited_int >= 0 and random_limited_int <= upper_limit + + except Exception: + # print(Exception) + assert True + return From b7c45531e67feddbfcced35c377cc22e93f6063d Mon Sep 17 00:00:00 2001 From: Piero Date: Tue, 25 Nov 2025 19:04:27 +0100 Subject: [PATCH 04/13] chore: removed useless comments --- src/random_number.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/random_number.py b/src/random_number.py index 3c0717dc..94ae0b32 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -17,13 +17,11 @@ def random_limited_positive_int(upper_limit): try: assert isinstance(upper_limit, int) except: - # for testing # TODO: handle the exception gracefully raise Exception("use integers only") try: assert upper_limit > 0 and upper_limit <= sys.maxsize except: - # for testing # TODO: handle the exception gracefully raise Exception("Sorry, no numbers below or equal to zero") return random.randint(0, upper_limit) From 0eacc1a11b0ce813a0acc7ca1908b65573b34513 Mon Sep 17 00:00:00 2001 From: Piero Date: Wed, 26 Nov 2025 15:02:21 +0100 Subject: [PATCH 05/13] chore: removed useless return --- tests/test_random_number.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/test_random_number.py b/tests/test_random_number.py index 7cb405ab..e880edcd 100644 --- a/tests/test_random_number.py +++ b/tests/test_random_number.py @@ -17,6 +17,4 @@ def test_random_limited(upper_limit): assert random_limited_int >= 0 and random_limited_int <= upper_limit except Exception: - # print(Exception) assert True - return From 953f97192c06cddfa26e0816bab40ad0c56947bb Mon Sep 17 00:00:00 2001 From: Piero Date: Wed, 26 Nov 2025 15:10:52 +0100 Subject: [PATCH 06/13] chore: removed fulfilled todos comments --- src/random_number.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/random_number.py b/src/random_number.py index 94ae0b32..4c690d4c 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -17,12 +17,10 @@ def random_limited_positive_int(upper_limit): try: assert isinstance(upper_limit, int) except: - # TODO: handle the exception gracefully - raise Exception("use integers only") + raise Exception("use integers only") try: assert upper_limit > 0 and upper_limit <= sys.maxsize except: - # TODO: handle the exception gracefully raise Exception("Sorry, no numbers below or equal to zero") return random.randint(0, upper_limit) From a5ee6aae808f19ef87e698267a943c4b33f7746a Mon Sep 17 00:00:00 2001 From: Piero Date: Wed, 26 Nov 2025 15:28:52 +0100 Subject: [PATCH 07/13] feat: user can now set the upper limit of the generated number --- src/random_number.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/random_number.py b/src/random_number.py index 4c690d4c..7c96c5f3 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -17,7 +17,7 @@ def random_limited_positive_int(upper_limit): try: assert isinstance(upper_limit, int) except: - raise Exception("use integers only") + raise Exception("use integers only") try: assert upper_limit > 0 and upper_limit <= sys.maxsize except: @@ -27,7 +27,19 @@ def random_limited_positive_int(upper_limit): def main(): print(random_positive_int()) - print(random_limited_positive_int(5)) + + user_input = None + while user_input is None: + try: + user_input = int( + input( + "Inserisci un limite superiore INTERO e POSITIVO per il range di generazione: " + ) + ) + print(random_limited_positive_int(user_input)) + except: + print("Errore: tipo o valore del limite superiore non validi") + user_input = None if __name__ == "__main__": From 7d82103043f5a0053108070d2116e837e454d5b7 Mon Sep 17 00:00:00 2001 From: Piero Date: Thu, 27 Nov 2025 18:17:52 +0100 Subject: [PATCH 08/13] fix: handle keyboardinterrupt gracefully --- src/random_number.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/random_number.py b/src/random_number.py index 7c96c5f3..e8dbba59 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -37,6 +37,9 @@ def main(): ) ) print(random_limited_positive_int(user_input)) + except KeyboardInterrupt: + print(' ') + sys.exit(1) except: print("Errore: tipo o valore del limite superiore non validi") user_input = None From e1d66f0ddb618aa7d1c999288cfdea32be0597fa Mon Sep 17 00:00:00 2001 From: Piero Date: Thu, 27 Nov 2025 18:34:29 +0100 Subject: [PATCH 09/13] fix: improved exception catching --- src/random_number.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/random_number.py b/src/random_number.py index e8dbba59..ee6f1ce6 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -14,14 +14,11 @@ def random_positive_int() -> int: # maybe limited_random... is a better name? def random_limited_positive_int(upper_limit): - try: - assert isinstance(upper_limit, int) - except: - raise Exception("use integers only") + assert isinstance(upper_limit, int) try: assert upper_limit > 0 and upper_limit <= sys.maxsize - except: - raise Exception("Sorry, no numbers below or equal to zero") + except AssertionError as e: + raise ValueError('input a positive non-zero number') from e return random.randint(0, upper_limit) @@ -38,10 +35,10 @@ def main(): ) print(random_limited_positive_int(user_input)) except KeyboardInterrupt: - print(' ') + print(" ") sys.exit(1) - except: - print("Errore: tipo o valore del limite superiore non validi") + except Exception as e: + print(e) user_input = None From 702ec3b3db162c86ac2c670c3cdae7c3fbdcf161 Mon Sep 17 00:00:00 2001 From: Piero Date: Thu, 27 Nov 2025 18:41:11 +0100 Subject: [PATCH 10/13] chore: unchained asserts to make the linter happy --- tests/test_random_number.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_random_number.py b/tests/test_random_number.py index e880edcd..89cbb2fb 100644 --- a/tests/test_random_number.py +++ b/tests/test_random_number.py @@ -1,4 +1,4 @@ -from src.random_number import * +from src.random_number import random_positive_int, random_limited_positive_int import sys import pytest @@ -6,7 +6,8 @@ def test_random_number(): random_int = random_positive_int() assert isinstance(random_int, int) - assert random_int >= 0 and random_int <= sys.maxsize + assert random_int >= 0 + assert random_int <= sys.maxsize @pytest.mark.parametrize("upper_limit", [0, -3, sys.maxsize, "a", 4.5, 5000, 1]) From 63d3847b365f0df58372970349f54edfb16bc378 Mon Sep 17 00:00:00 2001 From: Piero Date: Thu, 27 Nov 2025 18:43:53 +0100 Subject: [PATCH 11/13] chore: double quotes --- src/random_number.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/random_number.py b/src/random_number.py index ee6f1ce6..a1bba566 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -18,7 +18,7 @@ def random_limited_positive_int(upper_limit): try: assert upper_limit > 0 and upper_limit <= sys.maxsize except AssertionError as e: - raise ValueError('input a positive non-zero number') from e + raise ValueError("input a positive non-zero number") from e return random.randint(0, upper_limit) From 14671cab6cbf8d245897ac71104a658577e75a67 Mon Sep 17 00:00:00 2001 From: Piero Date: Thu, 27 Nov 2025 18:48:44 +0100 Subject: [PATCH 12/13] added comment --- src/random_number.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/random_number.py b/src/random_number.py index a1bba566..b80ad79f 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -14,6 +14,7 @@ def random_positive_int() -> int: # maybe limited_random... is a better name? def random_limited_positive_int(upper_limit): + #raises a ValueError on failure assert isinstance(upper_limit, int) try: assert upper_limit > 0 and upper_limit <= sys.maxsize From 9a7066177de7dd97440cf538ecd9bcf400a949f6 Mon Sep 17 00:00:00 2001 From: Piero Date: Thu, 27 Nov 2025 18:50:05 +0100 Subject: [PATCH 13/13] Revert "added comment" This reverts commit 14671cab6cbf8d245897ac71104a658577e75a67. --- src/random_number.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/random_number.py b/src/random_number.py index b80ad79f..a1bba566 100644 --- a/src/random_number.py +++ b/src/random_number.py @@ -14,7 +14,6 @@ def random_positive_int() -> int: # maybe limited_random... is a better name? def random_limited_positive_int(upper_limit): - #raises a ValueError on failure assert isinstance(upper_limit, int) try: assert upper_limit > 0 and upper_limit <= sys.maxsize