# Scientific Computing with Python Projects - Arithmetic Formatter

I think I have get the correct format but it turned out the program said the arrangement output is not as expected, and I also cannot fulfil the error of “Numbers cannot be more than four digits”, wonder if I messed up with my code. Many thanks

Here is my code
def arithmetic_arranger(problems, ans= True):
global arranged_problems
top = ‘’
middle = ‘’
dash = ‘’
sum = 0
result = “”

``````# checking no of problems is not more than 5

if len(problems) > 5:
return ("Error: Too many problems.")

else:

for problem in problems:
form = problem.split(" ")
first_num = form[0]
operator = form[1]
sec_num = form[2]
length = len(max(first_num, sec_num)) + 2

# checking if opreator is + or -
if operator != '+' and operator != '-':
return ("Error: Operator must be '+' or '-'.")

# check if the operhand is digits
if not first_num.isnumeric() or not sec_num.isnumeric():
return ("Error: Numbers must only contain digits.")

# check if the operhand is not more than 4 digits
if len(first_num) > 4 or len(sec_num) > 4:
print ('Error: Numbers cannot be more than four digits')

elif operator == "+":
sum = int(first_num) + int(sec_num)

elif operator == "-":
sum = int(first_num) - int(sec_num)

if problem != problems[-1]:
top += first_num.rjust(length) + "    "
middle += operator + sec_num.rjust(length - 1) + "    "
dash += "-" * length + "    "
result += str(sum).rjust(length) + "    "
else:
top += first_num.rjust(length + 1)
middle += operator + sec_num.rjust(length)
dash += "-" * (length + 1)
result += str(sum).rjust(length + 1)
# Show result , check if the para is True
if ans == True:
arranged_problems = top + "\n" + middle + "\n" + dash + "\n" + result
# print (middle)
# print (dash)
elif ans == False:
arranged_problems = top + "\n" + middle + "\n" + dash

return arranged_problems
``````

print(arithmetic_arranger([“3801 - 2”, “123 + 49”]))

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

Challenge: Scientific Computing with Python Projects - Arithmetic Formatter

Do you need help understanding the error?
(Pls post the errors if so)

thanks so much , here is the error

`````` python main.py
32      3801      45      123
+ 698    -    2    + 43    +  49
-----    ------    ----    -----
730      3799      88      172
============================= test session starts ==============================
platform linux -- Python 3.8.12, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- /home/runner/boilerplate-arithmetic-formatter-9/venv/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/boilerplate-arithmetic-formatter-9
collected 10 items

test_module.py::test_template[test_two_problems_arrangement1] FAILED     [ 10%]
test_module.py::test_template[test_two_problems_arrangement2] FAILED     [ 20%]
test_module.py::test_template[test_four_problems_arrangement] FAILED     [ 30%]
test_module.py::test_template[test_five_problems_arrangement] FAILED     [ 40%]
test_module.py::test_template[test_too_many_problems] PASSED             [ 50%]
test_module.py::test_template[test_incorrect_operator] PASSED            [ 60%]
test_module.py::test_template[test_too_many_digits] FAILED               [ 70%]
test_module.py::test_template[test_only_digits] PASSED                   [ 80%]
test_module.py::test_template[test_two_problems_with_solutions] FAILED   [ 90%]
test_module.py::test_template[test_five_problems_with_solutions] FAILED  [100%]

=================================== FAILURES ===================================
________________ test_template[test_two_problems_arrangement1] _________________

arguments = [['3801 - 2', '123 + 49']]
expected_output = '  3801      123\n-    2    +  49\n------    -----'
fail_message = 'Expected different output when calling "arithmetic_arranger()" with ["3801 - 2", "123 + 49"]'

@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
def test_template(arguments, expected_output, fail_message):
actual = arithmetic_arranger(*arguments)
>       assert actual == expected_output, fail_message
E       AssertionError: Expected different output when calling "arithmetic_arranger()" with ["3801 - 2", "123 + 49"]
E       assert '  3801      123\n-    2    +  49\n------    -----\n  3799      172' == '  3801      123\n-    2    +  49\n------    -----'
E             3801      123
E           -    2    +  49
E         - ------    -----
E         + ------    -----
E         ?                +
E         +   3799      172

test_module.py:77: AssertionError
________________ test_template[test_two_problems_arrangement2] _________________

arguments = [['1 + 2', '1 - 9380']]
expected_output = '  1         1\n+ 2    - 9380\n---    ------'
fail_message = 'Expected different output when calling "arithmetic_arranger()" with ["1 + 2", "1 - 9380"]'

@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
def test_template(arguments, expected_output, fail_message):
actual = arithmetic_arranger(*arguments)
>       assert actual == expected_output, fail_message
E       AssertionError: Expected different output when calling "arithmetic_arranger()" with ["1 + 2", "1 - 9380"]
E       assert '  1          1\n+ 2    -  9380\n---    -------\n  3      -9379' == '  1         1\n+ 2    - 9380\n---    ------'
E         -   1         1
E         +   1          1
E         ?    +
E         - + 2    - 9380
E         + + 2    -  9380
E         ?         +
E         - ---    ------
E         + ---    -------
E         ?              ++
E         +   3      -9379

test_module.py:77: AssertionError
________________ test_template[test_four_problems_arrangement] _________________

arguments = [['3 + 855', '3801 - 2', '45 + 43', '123 + 49']]
expected_output = '    3      3801      45      123\n+ 855    -    2    + 43    +  49\n-----    ------    ----    -----'
fail_message = 'Expected different output when calling "arithmetic_arranger()" with ["3 + 855", "3801 - 2", "45 + 43", "123 + 49"]'

@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
def test_template(arguments, expected_output, fail_message):
actual = arithmetic_arranger(*arguments)
>       assert actual == expected_output, fail_message
E       AssertionError: Expected different output when calling "arithmetic_arranger()" with ["3 + 855", "3801 - 2", "45 + 43", "123 + 49"]
E       assert ('    3      3801      45      123\n'\n '+ 855    -    2    + 43    +  49\n'\n '-----    ------    ----    -----\n'\n '  858      3799      88      172') == ('    3      3801      45      123\n'\n '+ 855    -    2    + 43    +  49\n'\n '-----    ------    ----    -----')
E               3      3801      45      123
E           + 855    -    2    + 43    +  49
E         - -----    ------    ----    -----
E         + -----    ------    ----    -----
E         ?                                 +
E         +   858      3799      88      172

test_module.py:77: AssertionError
________________ test_template[test_five_problems_arrangement] _________________

arguments = [['11 + 4', '3801 - 2999', '1 + 2', '123 + 49', '1 - 9380']]
expected_output = '  11      3801      1      123         1\n+  4    - 2999    + 2    +  49    - 9380\n----    ------    ---    -----    ------'
fail_message = 'Expected different output when calling "arithmetic_arranger()" with ["11 + 4", "3801 - 2999", "1 + 2", "123 + 49", "1 - 9380"]'

@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
def test_template(arguments, expected_output, fail_message):
actual = arithmetic_arranger(*arguments)
>       assert actual == expected_output, fail_message
E       AssertionError: Expected different output when calling "arithmetic_arranger()" with ["11 + 4", "3801 - 2999", "1 + 2", "123 + 49", "1 - 9380"]
E       assert (' 11      3801      1     123          1\n'\n '+ 4    - 2999    + 2    + 49    -  9380\n'\n '---    ------    ---    ----    -------\n'\n ' 15       802      3     172      -9379') == ('  11      3801      1      123         1\n'\n '+  4    - 2999    + 2    +  49    - 9380\n'\n '----    ------    ---    -----    ------')
E         -   11      3801      1      123         1
E         ? -                    -
E         +  11      3801      1     123          1
E         ?                                      +
E         - +  4    - 2999    + 2    +  49    - 9380
E         ?   -                       -
E         + + 4    - 2999    + 2    + 49    -  9380
E         ?                                  +
E         - ----    ------    ---    -----    ------
E         ?    -                         -
E         + ---    ------    ---    ----    -------
E         ?                                       ++
E         +  15       802      3     172      -9379

test_module.py:77: AssertionError
_____________________ test_template[test_too_many_digits] ______________________

arguments = [['24 + 85215', '3801 - 2', '45 + 43', '123 + 49']]
expected_output = 'Error: Numbers cannot be more than four digits.'
fail_message = 'Expected calling "arithmetic_arranger()" with a problem that has a number over 4 digits long to return "Error: Numbers cannot be more than four digits."'

@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
def test_template(arguments, expected_output, fail_message):
actual = arithmetic_arranger(*arguments)
>       assert actual == expected_output, fail_message
E       AssertionError: Expected calling "arithmetic_arranger()" with a problem that has a number over 4 digits long to return "Error: Numbers cannot be more than four digits."
E       assert ('     24      3801      45      123\n'\n '+ 85215    -    2    + 43    +  49\n'\n '-------    ------    ----    -----\n'\n '      0      3799      88      172') == 'Error: Numbers cannot be more than four digits.'
E         - Error: Numbers cannot be more than four digits.
E         +      24      3801      45      123
E         + + 85215    -    2    + 43    +  49
E         + -------    ------    ----    -----
E         +       0      3799      88      172

test_module.py:77: AssertionError
----------------------------- Captured stdout call -----------------------------
Error: Numbers cannot be more than four digits
_______________ test_template[test_two_problems_with_solutions] ________________

arguments = [['3 + 855', '988 + 40'], True]
expected_output = '    3      988\n+ 855    +  40\n-----    -----\n  858     1028'
fail_message = 'Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with ["3 + 855", "988 + 40"] and a second argument of `True`.'

@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
def test_template(arguments, expected_output, fail_message):
actual = arithmetic_arranger(*arguments)
>       assert actual == expected_output, fail_message
E       AssertionError: Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with ["3 + 855", "988 + 40"] and a second argument of `True`.
E       assert '    3       988\n+ 855    +   40\n-----    ------\n  858      1028' == '    3      988\n+ 855    +  40\n-----    -----\n  858     1028'
E         -     3      988
E         +     3       988
E         ?      +
E         - + 855    +  40
E         + + 855    +   40
E         ?           +
E         - -----    -----
E         + -----    ------
E         ?          +
E         -   858     1028
E         +   858      1028
E         ?      +

test_module.py:77: AssertionError
_______________ test_template[test_five_problems_with_solutions] _______________

arguments = [['32 - 698', '1 - 3801', '45 + 43', '123 + 49', '988 + 40'], True]
expected_output = '   32         1      45      123      988\n- 698    - 3801    + 43    +  49    +  40\n-----    ------    ----    -----    -----\n -666     -3800      88      172     1028'
fail_message = 'Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with five arithmetic problems and a second argument of `True`.'

@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
def test_template(arguments, expected_output, fail_message):
actual = arithmetic_arranger(*arguments)
>       assert actual == expected_output, fail_message
E       AssertionError: Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with five arithmetic problems and a second argument of `True`.
E       assert ('   32         1      45     123       988\n'\n '- 698    - 3801    + 43    + 49    +   40\n'\n '-----    ------    ----    ----    ------\n'\n ' -666     -3800      88     172      1028') == ('   32         1      45      123      988\n'\n '- 698    - 3801    + 43    +  49    +  40\n'\n '-----    ------    ----    -----    -----\n'\n ' -666     -3800      88      172     1028')
E         -    32         1      45      123      988
E         ?                        -
E         +    32         1      45     123       988
E         ?                                +
E         - - 698    - 3801    + 43    +  49    +  40
E         ?                             -
E         + - 698    - 3801    + 43    + 49    +   40
E         ?                                     +
E         - -----    ------    ----    -----    -----
E         ?                                 ----
E         + -----    ------    ----    ----    ------
E         ?                                ++++
E         -  -666     -3800      88      172     1028
E         ?                        -
E         +  -666     -3800      88     172      1028
E         ?                                +

test_module.py:77: AssertionError
=========================== short test summary info ============================
FAILED test_module.py::test_template[test_two_problems_arrangement1] - Assert...
FAILED test_module.py::test_template[test_two_problems_arrangement2] - Assert...
FAILED test_module.py::test_template[test_four_problems_arrangement] - Assert...
FAILED test_module.py::test_template[test_five_problems_arrangement] - Assert...
FAILED test_module.py::test_template[test_too_many_digits] - AssertionError: ...
FAILED test_module.py::test_template[test_two_problems_with_solutions] - Asse...
FAILED test_module.py::test_template[test_five_problems_with_solutions] - Ass...
========================= 7 failed, 3 passed in 0.22s ==========================

``````

Try this test case with your code.
One of your errors shows that you have an extra space after the 2nd 1 in the first equation and after the minus sign in the second equation
and that you have an extra dash underneath the 2nd equation (plus one other character, a space)

If you have yet to identify the missing error, compare that case to the other ones and ask yourself: why doesn’t it returns anything?

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