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
Your code so far

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

Your code so far

   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
 

Your browser information:

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

Challenge: Scientific Computing with Python Projects - Arithmetic Formatter

Link to the challenge:

This error is showing that you have extra space-like characters added after each line. It shows that you have 4 of these extra space-like characters.

You will need to remove these extra chars to match the test result.

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