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: