# Lucky Guesses: Simulating a Multiple-Choice Exam

Python Puzzles

Back to the Python! homepage

Simulate a multiple-choice exam where you divide the questions into three probabilities of attaining a correct answer.

• Questions that have a 100% confidence of being correct
• Questions that have a 1/3 confidence of being correct
• Questions that have a 1/4 confidence of being correct

After running 10,000 simulations of the exam, determine the following:

• Average number of correct answers
• Minimum and maximum number of correct answers
• Percentage of the exams where the number of correct answers is over some desired value
• Standard Deviation

Here is the code I developed in Python. In my simulation I choose a 50 question exam where my desired score of 35 was attained 74% of the time.

```import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

desired_score = 35
known_guess = 1
educated_guess = 1/3
random_guess = 1/4
simulations = 1_000_000

np_result = np.random.binomial(30,known_guess,simulations)

filter_arr = np_result >= 35
newarr = np_result[filter_arr]

probability_desired_score = len(newarr)/len(np_result)

print('Probability of obtaining a score of ' + str(desired_score) + ' or greater is ' + '{0:.2%}'.format(probability_desired_score))
print('The average score is' + '{0:.2%}'.format(np.average(np_result)))
print('The minimum score is' + '{0:.2%}'.format(np.min(np_result)))
print('The maximum score is' + '{0:.2%}'.format(np.max(np_result)))
print('The standard deviation is' + '{0:.2%}'.format(np.std(np_result)))

df = pd.Series(np_result)
df = df.value_counts()
print(df.sort_index())

plt.bar(df.index, df.values)
plt.ylabel('Frequency')
plt.xticks(np.arange(min(df.index), 51, 2))
plt.show()
```

Here are the results of the print statements.

Probability of obtaining a score of 35 or greater is 74%
The average score is 36
The minimum score is 30
The maximum score is 46
The standard deviation is 2

This Pandas Series shows the number of questions correct on the left and the occurrences on the right.