Questions on formatting and input validation

So I believe that I am 90% done with this challenge but I have ran into 2 problems:

  1. My formatting for the calculation output is off. For some reason the output include the word array in my calculation output for each calculation that I do. I have tried to research this problem to the best of my ability so I am not sure if I am describing it correctly because I didn’t get any usual information.
  2. My input validation isn’t properly working. I believe I have it set up according to the documentation that I found to meet the requirements of the challenge but I don’t know why it isn’t properly working.

If anyone can teach me what I am doing wrong that would be greatly appreciated.

import numpy as np

def calculate(list):


  #0.5 Input validation for list  
  while True:
     try:
        #1. Transform list into a 3x3 matrix
        arr = np.asarray(list)
        matx = np.reshape(arr, (3,3))

        break
     except ValueError(len(list) < 9):
         print("List must contain nine numbers.")
    
  

  #2. Create Dict and compute stats for matrix
  calculations = {
    'Mean': [[np.mean(matx,axis=0)], [np.mean(matx, axis=1)], np.mean(matx)],
    'Variance': [[np.var(matx,axis=0)], [np.var(matx, axis=1)], np.var(matx)],
    'Std Deviation': [[np.std(matx,axis=0)], [np.std(matx, axis=1)], np.std(matx)],
    'Max': [[np.max(matx,axis=0)], [np.max(matx, axis=1)], np.max(matx)],  
    'Min': [[np.min(matx,axis=0)], [np.min(matx, axis=1)], np.min(matx)],  
    'Sum': [[np.sum(matx,axis=0)], [np.sum(matx, axis=1)], np.sum(matx)]  
  }
  print(calculations)
  return calculations

Console Output Log

 python main.py
{'Mean': [[array([3., 4., 5.])], [array([1., 4., 7.])], 4.0], 'Variance': [[array([6., 6., 6.])], [array([0.66666667, 0.66666667, 0.66666667])], 6.666666666666667], 'Std Deviation': [[array([2.44948974, 2.44948974, 2.44948974])], [array([0.81649658, 0.81649658, 0.81649658])], 2.581988897471611], 'Max': [[array([6, 7, 8])], [array([2, 5, 8])], 8], 'Min': [[array([0, 1, 2])], [array([0, 3, 6])], 0], 'Sum': [[array([ 9, 12, 15])], [array([ 3, 12, 21])], 36]}
{'Mean': [[array([3., 4., 5.])], [array([1., 4., 7.])], 4.0], 'Variance': [[array([6., 6., 6.])], [array([0.66666667, 0.66666667, 0.66666667])], 6.666666666666667], 'Std Deviation': [[array([2.44948974, 2.44948974, 2.44948974])], [array([0.81649658, 0.81649658, 0.81649658])], 2.581988897471611], 'Max': [[array([6, 7, 8])], [array([2, 5, 8])], 8], 'Min': [[array([0, 1, 2])], [array([0, 3, 6])], 0], 'Sum': [[array([ 9, 12, 15])], [array([ 3, 12, 21])], 36]}
{'Mean': [[array([3.66666667, 5.        , 3.        ])], [array([3.33333333, 4.        , 4.33333333])], 3.888888888888889], 'Variance': [[array([9.55555556, 0.66666667, 8.66666667])], [array([ 3.55555556, 10.66666667,  6.22222222])], 6.987654320987654], 'Std Deviation': [[array([3.09120617, 0.81649658, 2.94392029])], [array([1.88561808, 3.26598632, 2.49443826])], 2.6434171674156266], 'Max': [[array([8, 6, 7])], [array([6, 8, 7])], 8], 'Min': [[array([1, 4, 0])], [array([2, 0, 1])], 0], 'Sum': [[array([11, 15,  9])], [array([10, 12, 13])], 35]}
E{'Mean': [[array([4.66666667, 4.33333333, 2.66666667])], [array([5.        , 3.        , 3.66666667])], 3.888888888888889], 'Variance': [[array([ 9.55555556, 11.55555556,  4.22222222])], [array([10.66666667,  0.        , 14.88888889])], 9.209876543209875], 'Std Deviation': [[array([3.09120617, 3.39934634, 2.05480467])], [array([3.26598632, 0.        , 3.8586123 ])], 3.0347778408328137], 'Max': [[array([9, 9, 5])], [array([9, 3, 9])], 9], 'Min': [[array([2, 1, 0])], [array([1, 3, 0])], 0], 'Sum': [[array([14, 13,  8])], [array([15,  9, 11])], 35]}
EE
======================================================================
ERROR: test_calculate (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/boilerplate-mean-variance-standard-deviation-calculator/test_module.py", line 10, in test_calculate
    self.assertAlmostEqual(actual, expected, "Expected different output when calling 'calculate()' with '[2,6,2,8,4,0,1,5,7]'")
  File "/usr/lib/python3.8/unittest/case.py", line 943, in assertAlmostEqual
    diff = abs(first - second)
TypeError: unsupported operand type(s) for -: 'dict' and 'dict'

======================================================================
ERROR: test_calculate2 (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/boilerplate-mean-variance-standard-deviation-calculator/test_module.py", line 15, in test_calculate2
    self.assertAlmostEqual(actual, expected, "Expected different output when calling 'calculate()' with '[9,1,5,3,3,3,2,9,0]'")
  File "/usr/lib/python3.8/unittest/case.py", line 943, in assertAlmostEqual
    diff = abs(first - second)
TypeError: unsupported operand type(s) for -: 'dict' and 'dict'

======================================================================
ERROR: test_calculate_with_few_digits (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/boilerplate-mean-variance-standard-deviation-calculator/mean_var_std.py", line 16, in calculate
    matx = np.reshape(arr, (3,3))
  File "<__array_function__ internals>", line 5, in reshape
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/numpy/core/fromnumeric.py", line 299, in reshape
    return _wrapfunc(a, 'reshape', newshape, order=order)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/numpy/core/fromnumeric.py", line 58, in _wrapfunc
    return bound(*args, **kwds)
ValueError: cannot reshape array of size 7 into shape (3,3)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/runner/boilerplate-mean-variance-standard-deviation-calculator/test_module.py", line 18, in test_calculate_with_few_digits
    self.assertRaisesRegex(ValueError, "List must contain nine numbers.", mean_var_std.calculate, [2,6,2,8,4,0,1,])
  File "/usr/lib/python3.8/unittest/case.py", line 1357, in assertRaisesRegex
    return context.handle('assertRaisesRegex', args, kwargs)
  File "/usr/lib/python3.8/unittest/case.py", line 202, in handle
    callable_obj(*args, **kwargs)
  File "/home/runner/boilerplate-mean-variance-standard-deviation-calculator/mean_var_std.py", line 19, in calculate
    except ValueError(len(list) < 9):
TypeError: catching classes that do not inherit from BaseException is not allowed

----------------------------------------------------------------------
Ran 3 tests in 0.008s

FAILED (errors=3)

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36.

Challenge: Mean-Variance-Standard Deviation Calculator

Link to the challenge:

  1. There’s array in the output, because those are numpy’s arrays and their string representation looks like that.

  2. I found this very interesting, issue is that with except ValueError(len(list) < 9): function is trying to catch not simply error - ValueError class, but an instance of it that’s made with ValueError(len(list) < 9) expression.

Okay then thank you for the insight. I thought numerical strings could only be created with quotation marks…? How should I have created my numpy calc so that it doesn’t go that? How should I have set up my input validation statement so that it doesn’t look for the instance of the error?

For the first one, there’s needed one more step to change type from numpy’s array to normal python list. Regarding the exception - for the line catching exception - one with except, use just ValueError, without anything in parenthesis. Then only in the indented block, if that’s needed, instantiate with specific description.

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.