# Scientific Computing with Python Projects - Arithmetic Formatter

Tell us what’s happening:
I don’t understand why I keep failing the test, saying that the placement of arranged problem is a mess, but it displays the arrangement correctly in the terminal, is there any way to fix this? Thank you

below is the result of the test

``````import re

def arithmetic_arranger(aa, bb=False):
pengganti = []
operator = []
even_index = []
odd_index = []
spasi = []
total = []
dash = []
if len(aa) > 5:
return ("Error: Too many problems.")
delimiter = " "
asd = delimiter.join(aa)
aaa = delimiter.join(asd)
mamang = re.findall('[0-9]+', asd)
mamung = re.findall('[a-z,A-Z]+', aaa)
if mamung != []:
return ("Error: Numbers must only contain digits.")
maming = re.findall('[+-/*]+', asd)
for l in mamang:
if len(str(l)) >= 5:
return ("Error: Numbers cannot be more than four digits.")
break
else:
pengganti.append(int(l))

#untuk menyimpan nilai maming
for p in maming:
if p != '+' and p != '-':
return ("Error: Operator must be '+' or '-'.")
break
else:
operator.append(p)

for i in range(len(pengganti)):
if i % 2 == 0:
even_index.append(pengganti[i])
else:
odd_index.append(pengganti[i])

#untuk spasi
for i in range(len(even_index)):
a = even_index[i]
b = odd_index[i]
if a > b:
spasiu = len(str(a)) + 2
spasi.append(spasiu)
elif a < b:
spasiu = len(str(b)) + 2
spasi.append(spasiu)

for i in range(len(even_index)):
if operator[i] == "+":
a = even_index[i] + odd_index[i]
total.append(a)
elif operator[i] == "-":
a = even_index[i] - odd_index[i]
total.append(a)

for i in spasi:
f = i * "-"
dash.append(f)

arranged_problems = ""
aa = ""
bi = ""
cc = ""
dd = ""
ddd = []
for i in range(len(operator)):
a = f"{even_index[i]:>{spasi[i]}}"
b = f"{operator[i]:} {odd_index[i]:>{spasi[i]-2}}"
c = f"{dash[i]}"
d = f"{total[i]:>{spasi[i]-2}}"

aa += a + "    "
bi += b + "    "
cc += c + "    "
dd += d + "    "

if bb == True:
arranged_problems = f"{aa}\n{bi}\n{cc}\n{dd}"

elif bb == False:
arranged_problems = f"{aa}\n{bi}\n{cc}"

return arranged_problems

``````

``````   32      3801      45      123
+ 698    -    2    + 43    +  49
-----    ------    ----    -----
=================== test session starts ===================
platform linux -- Python 3.10.8, pytest-6.2.5, py-1.11.0, pluggy-1.0.0 -- /home/runner/boilerplate-arithmetic-formatter-1/venv/bin/python
cachedir: .pytest_cache
rootdir: /home/runner/boilerplate-arithmetic-formatter-1
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] PASSED [ 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------    -----    ' == '  3801      123\n-    2    +  49\n------    -----'
E         -   3801      123
E         +   3801      123
E         ?                ++++
E         - -    2    +  49
E         + -    2    +  49
E         ?                ++++
E         - ------    -----
E         + ------    -----
E         ?                ++++

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---    ------    ' == '  1         1\n+ 2    - 9380\n---    ------'
E         -   1         1
E         +   1         1
E         ?              ++++
E         - + 2    - 9380
E         + + 2    - 9380
E         ?              ++++
E         - ---    ------
E         + ---    ------
E         ?              ++++

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 '-----    ------    ----    -----    ') == ('    3      3801      45      123\n'\n '+ 855    -    2    + 43    +  49\n'\n '-----    ------    ----    -----')
E         -     3      3801      45      123
E         +     3      3801      45      123
E         ?                                 ++++
E         - + 855    -    2    + 43    +  49
E         + + 855    -    2    + 43    +  49
E         ?                                 ++++
E         - -----    ------    ----    -----
E         + -----    ------    ----    -----
E         ?                                 ++++

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 '----    ------    ---    -----    ------    ') == ('  11      3801      1      123         1\n'\n '+  4    - 2999    + 2    +  49    - 9380\n'\n '----    ------    ---    -----    ------')
E         -   11      3801      1      123         1
E         +   11      3801      1      123         1
E         ?                                         ++++
E         - +  4    - 2999    + 2    +  49    - 9380
E         + +  4    - 2999    + 2    +  49    - 9380
E         ?                                         ++++
E         - ----    ------    ---    -----    ------
E         + ----    ------    ---    -----    ------
E         ?                                         ++++

test_module.py:77: AssertionError
_____ 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-----    -----    \n858    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         ? --   -
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         +    32         1      45      123      988
E         ?                                          ++++
E         - - 698    - 3801    + 43    +  49    +  40
E         + - 698    - 3801    + 43    +  49    +  40
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]
FAILED test_module.py::test_template[test_two_problems_arrangement2]
FAILED test_module.py::test_template[test_four_problems_arrangement]
FAILED test_module.py::test_template[test_five_problems_arrangement]
FAILED test_module.py::test_template[test_two_problems_with_solutions]
FAILED test_module.py::test_template[test_five_problems_with_solutions]
=============== 6 failed, 4 passed in 0.30s ===============

KeyboardInterrupt

``````

User Agent is: `Google Chrome/5.0 (Windows NT 10.0; Win64; x64) Chrome/109.0.0.0 `