From 7a5124ed221def02e4eeec32fa9a10e0fd179f93 Mon Sep 17 00:00:00 2001 From: Ameen-Agha Date: Sun, 12 Jan 2025 20:04:09 +0200 Subject: [PATCH] Added solution and test files for Guess the Number Game --- solutions/guess_the_number_game.py | 59 +++++++++++++++++++ solutions/tests/test_guess_the_number_game.py | 54 +++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 solutions/guess_the_number_game.py create mode 100644 solutions/tests/test_guess_the_number_game.py diff --git a/solutions/guess_the_number_game.py b/solutions/guess_the_number_game.py new file mode 100644 index 000000000..351ef1f9b --- /dev/null +++ b/solutions/guess_the_number_game.py @@ -0,0 +1,59 @@ +""" +A module for a Guess the Number game. +Module contents: + - generate_random_number: Generates a random number within a range. + - guess_the_number: Compares a guessed number with the target and returns + feedback. +Created on 8-01-25 +@author: Ameen Agha +""" + +import random + +def generate_random_number(start: int, end: int) -> int: + """ + Generates a random number within a given range (inclusive). + Parameters: + start (int): Start of the range (inclusive). + end (int): End of the range (inclusive). + Returns: + int: A randomly generated number within the range. + Raises: + AssertionError: If start or end are not integers, or start >= end. + Examples: + >>> random.seed(1) # Fixing seed for test reproducibility + >>> generate_random_number(1, 10) + 3 + >>> generate_random_number(20, 30) + 24 + """ + assert isinstance(start, int) and isinstance(end, int), "Inputs must be integers." + assert start < end, "Start must be less than end." + return random.randint(start, end) + +def guess_the_number(target: int, guess: int) -> str: + """ + Compares a guess with the target number and provides feedback. + Parameters: + target (int): The target number to guess. + guess (int): The player's guessed number. + Returns: + str: Feedback indicating if the guess is too low, too high, or correct. + Raises: + AssertionError: If target or guess are not integers. + Examples: + >>> guess_the_number(10, 5) + 'Too low!' + >>> guess_the_number(10, 15) + 'Too high!' + >>> guess_the_number(10, 10) + 'Correct!' + """ + assert isinstance(target, int) and isinstance(guess, int), "Inputs must be integers." + + if guess < target: + return "Too low!" + elif guess > target: + return "Too high!" + else: + return "Correct!" diff --git a/solutions/tests/test_guess_the_number_game.py b/solutions/tests/test_guess_the_number_game.py new file mode 100644 index 000000000..0bd6b306d --- /dev/null +++ b/solutions/tests/test_guess_the_number_game.py @@ -0,0 +1,54 @@ +""" +Unit test module for the Guess the Number game. +Contains tests for the random number generator and guessing logic. +Created on 11-01-25 +@author: Ameen Agha +""" + +import unittest +from Guess_The_Number_Game import generate_random_number, guess_the_number + +class TestGuessTheNumber(unittest.TestCase): + """ + Test cases for the Guess the Number game functions. + These tests ensure random number generation and guessing logic + work as expected. + """ + + def test_random_number_generation(self): + """Test random number generation within a valid range.""" + random_numbers = [generate_random_number(1, 10) for _ in range(100)] + self.assertTrue(all(1 <= num <= 10 for num in random_numbers)) + + def test_random_number_invalid_range(self): + """Test random number generation with invalid range.""" + with self.assertRaises(AssertionError): + generate_random_number(10, 1) + + def test_random_number_non_integer_input(self): + """Test random number generation with non-integer inputs.""" + with self.assertRaises(AssertionError): + generate_random_number(1.5, 10) + + def test_guess_too_low(self): + """Test guessing too low.""" + feedback = guess_the_number(10, 5) + self.assertEqual(feedback, "Too low!") + + def test_guess_too_high(self): + """Test guessing too high.""" + feedback = guess_the_number(10, 15) + self.assertEqual(feedback, "Too high!") + + def test_guess_correct(self): + """Test guessing correctly.""" + feedback = guess_the_number(10, 10) + self.assertEqual(feedback, "Correct!") + + def test_guess_invalid_inputs(self): + """Test guessing with non-integer inputs.""" + with self.assertRaises(AssertionError): + guess_the_number(10, "five") + +if __name__ == "__main__": + unittest.main()