Program Requirements

In the following information, numbered points describe a core requirement of the program, and bullet points (in italics) are additional details, notes and hints regarding the requirement. Ask your tutor if you do not understand the requirements or would like further information.

1. Print a welcome message, and then prompt the user to select a difficulty by entering 1, 2 or 3.

2. Use a loop to re-prompt the user until a valid response (1, 2 or 3) is entered. Once a difficulty has been selected, print a message confirming the selected difficulty and set variables as follows:

  • If "Easy" (1) was chosen... lives=3, max_num=10 and questions=5
  • If "Medium" (2) was chosen... lives=2, max_num=25 and questions=10
  • If "Hard" (3) was chosen... lives =1, max_num=50 and questions=15
  • "lives" represents how many incorrect answers are permitted, "max_num" represents the largest number used when generating a question, and "questions" represents the number of questions.

3. Set a "score" variable to 0, and then enter a loop that repeats questions times.

  • "score" will be used to keep track of how many questions the user has answered correctly.

The body of this loop must...

3.1. Print which question the user is up to out of the total number of questions, as well as how many lives that have remaining, e.g. "Question 1 of 5. You have 2 lives remaining."

  • Print "1 life remaining" rather than "1 lives remaining" if lives is 1.

3.2. If the current question is not the final question of the test, use the "ask_question" function (detailed below) to generate and administer a question involving numbers between 1 and max_num.

If the current question is the final question of the test, print "Challenge question!" and use the "ask_question" function (user defined) to generate and administer a question involving numbers between max_num and max_num multiplied by 2.

  • e.g. The challenge question on Easy difficulty would use numbers between 10 and 20.

3.3. If the "ask_question" function returns a value of True, add one to the score variable. Otherwise, subtract 1 from the lives variable. If the lives variable is now 0, print "Out of lives, game over!" and immediately end the test (proceeding to Requirement 4).

4. Print a "test complete" message, followed by a message that displays the user's score out of questions, and what percentage that represents, e.g. "You scored 3/5 (60%)."

  • Round the percentage value to the nearest whole number.

5. Print the user's grade, based upon their percentage. The grades are High Distinction (100-80%), Distinction (79-70%), Credit (69-60%), Pass (59-50%) and Fail (49-0%).

The "ask_question" Function

There are two points in Requirement 3.2 where the program must generate and administer a question. This is a self-contained task consisting of a number of steps, with the only difference being the minimum and maximum numbers to use. As such, it is ideal to create a function for this task.

You must create a function named "ask_question" that receives two parameters:

  • "minimum", an integer representing the smallest number to use in the question
  • "maximum", an integer representing the largest number to use in the question

The function should generate two random integers between minimum and maximum, and then randomly select a mathematical operator of either '+' or '-'. It should use these values to display a question, e.g. "What is 4+ 5?", and prompt the user for their answer.

If the user answers correctly, the function should print "Correct!" and return the boolean value of True. Otherwise, the function should print "Incorrect!" and the correct answer, and return False.

The code that you design and write to implement this function is up to you, but you may find it useful to use the following C function:

  • The "rand ()" function, to generate random numbers within a range

The definition of the function should be at the start of the program, and it should be called where needed in the program. Revise Module 4 and 10 if you are uncertain about defining and using functions, and be sure to implement it so that it receives and returns values exactly as described above.

Ensure that the function does exactly what is specified above and nothing more - it is important to adhere to the stated specifications of a function.

Additions and Enhancements

Below are some minor additions and enhancements that you can make to the program to further test and demonstrate your programming ability.

  • When prompting the user to choose a difficulty, make it so that the program accepts "1", "e" or "easy" for Easy, "2", "m" or "medium" for Medium, and "3", "h" or "hard" for hard. A good approach is to convert the user's input to lowercase, and use an "in" comparison to compare the user's input to a tuple of options.
  • Put everything after the creation of the ask_question function into a loop so that the test can be run repeatedly without having to re-run the program. At the end of the test, ask the user whether they wish to start again and break out of the loop if they don't.
  • Use arrays in your code.

Program Output Example

To help you visualise the program, here is an example screenshot of the program being run:

Welcome to Maths Tester Pro.
Select a difficulty:
1) Easy
2) Medium
3) Hard
> easy
Invalid choice!
> 1
Enter 1, 2 or 3.
Easy mode selected!

Question 1 of 5. You have 3 lives remaining.
What is 5 - 32 2
Correct!

Question 2 of 5. You have 3 lives remaining.
What is 5 + 5? 10
Correct!

Question 3 of 5. You have 3 lives remaining.
What is 8 + 8? 19
Incorrect! The correct answer was 16.

Question 4 of 5. You have 2 lives remaining.
What is 1 + 2? 4
Incorrect! The correct answer was 3.

Question 5 of 5. You have 1 life remaining.
Challenge question!
What is 11 - 20? -9
Correct!

Test complete.
You scored 3/5 (60%).
Your grade is a Credit!
Academic Honesty!
It is not our intention to break the school's academic policy. Posted solutions are meant to be used as a reference and should not be submitted as is. We are not held liable for any misuse of the solutions. Please see the frequently asked questions page for further questions and inquiries.
Kindly complete the form. Please provide a valid email address and we will get back to you within 24 hours. Payment is through PayPal, Buy me a Coffee or Cryptocurrency. We are a nonprofit organization however we need funds to keep this organization operating and to be able to complete our research and development projects.