input: Write a python function to calculate the moving average of a list of data points with a specified window size.
  assert moving_average([3, 5, 7, 2, 8, 10, 11, 65, 72, 81, 99, 100, 150], 3) == [3.0, 4.0, 5.0, 4.666666666666667, 5.666666666666667, 6.666666666666667, 9.666666666666666, 28.666666666666668, 49.333333333333336, 72.66666666666667, 84.0, 93.33333333333333, 116.33333333333333]
  assert moving_average([1, 2, 3, 4, 5], 2) == [1.0, 1.5, 2.5, 3.5, 4.5]
  assert moving_average([10, 20, 30, 40, 50], 4) == [10.0, 15.0, 20.0, 25.0, 35.0]
output: def moving_average(data, window_size):
      if not data or window_size <= 0:
          return []
  
      result = []
      window_sum = 0
      for i in range(len(data)):
          window_sum += data[i]
          if i >= window_size - 1:
              result.append(window_sum / window_size)
              window_sum -= data[i - window_size + 1]
          else:
              result.append(window_sum / (i + 1))
              
      return result