def zScore(numbers: list) -> list:
     zScores = []
     standardDeviation = DescriptiveStatisticsOperations.standardDeviation(numbers)
     mean = DescriptiveStatisticsOperations.mean(numbers)
     for number in numbers:
         zScores.append(BasicOperations.division(BasicOperations.subtraction(number, mean), standardDeviation))
     return zScores
 def variance(numbers: list) -> float:
     mean = DescriptiveStatisticsOperations.mean(numbers)
     squaredDifferences = []
     for number in numbers:
         squaredDifferences.append(BasicOperations.square(BasicOperations.subtraction(mean, number)))
     variance = BasicOperations.division(sum(squaredDifferences), len(numbers))
     return variance
 def median(numbers: list) -> float:
     numbers = sorted(numbers)
     if len(numbers) % 2 == 1:
         middleIndex = int(BasicOperations.division(len(numbers) - 1, 2))
         median = numbers[middleIndex]
     else:
         leftMiddleIndex = int(BasicOperations.subtraction(BasicOperations.division(len(numbers) - 1, 2), 0.5))
         rightMiddleIndex = int(BasicOperations.addition(BasicOperations.division(len(numbers) - 1, 2), 0.5))
         median = BasicOperations.division(BasicOperations.addition(numbers[leftMiddleIndex], numbers[rightMiddleIndex]), 2)
     return float(median)
 def subtract(self, x, y):
     self.results.append(BasicOperations.subtraction(x, y))
     return self.results[-1]