import sys from typing import Union

Define types for mean function, trying to analyze input possibilities

Number = Union[int, float] # Number can be either int or float type Numbers = list[Number] # Numbers is a list of Number types Scores = Union[Number, Numbers] # Scores can be single or multiple

def mean(scores: Scores, method: int = 1) -> float: “”” Calculate the mean of a list of scores.

Average and Average2 are hidden functions performing mean algorithm

If a single score is provided in scores, it is returned as the mean.
If a list of scores is provided, the average is calculated and returned.
"""

def average(scores): 
    """Calculate the average of a list of scores using a Python for loop with rounding."""
    sum = 0
    len = 0
    for score in scores:
        if isinstance(score, Number):
            sum += score
            len += 1
        else:
            print("Bad data: " + str(score) + " in " + str(scores))
            sys.exit()
    return sum / len

def average2(scores):
    """Calculate the average of a list of scores using the built-in sum() function with rounding."""
    return sum(scores) / len(scores)

# test to see if scores is  a list of numbers
if isinstance(scores, list):
    if method == 1:  
        # long method
        result = average(scores)
    else:
        # built in method
        result = average2(scores)
    return round(result + 0.005, 2)

return scores # case where scores is a single valu

try with one number

singleScore = 100 print(“Print test data: “ + str(singleScore)) # concat data for single line print(“Mean of single number: “ + str(mean(singleScore)))

print()

define a list of numbers

testScores = [90.5, 100, 85.4, 88] print(“Print test data: “ + str(testScores)) print(“Average score, loop method: “ + str(mean(testScores))) print(“Average score, function method: “ + str(mean(testScores, 2)))

print()

badData = [100, “NaN”, 90] print(“Print test data: “ + str(badData)) print(“Mean with bad data: “ + str(mean(badData)))