Hello, I have finished my artithentic formatter but the test cases are not being passed. I am viewing the console for mistakes but it is kind of difficult to read what I did wrong. Could someone guide me to the right direction? Thanks.
first_operand_list = [];
second_operand_list = [];
line_list = [];
result_list = [];
def arithmetic_arranger(problems, result = False):
def format_answers():
i = 2;
j = 2;
k = 1;
while i < len(first_operand_list) and j < len(second_operand_list):
for n in result_list[k]:
if n == "-":
result_list[k - 1] = ' ';
break;
else:
result_list[k - 1] = ' ';
if (len(result_list[k])) == 4:
for n in result_list[k]:
if n == '-':
result_list[k - 1] = ' ';
break;
else:
result_list[k - 1] = ' ';
i += 3;
j += 3;
k += 3;
def to_answer():
i = 2;
j = 2;
while i < len(first_operand_list) and j < len(second_operand_list):
for k in second_operand_list[j - 1]:
if k == '-':
subtract = int(first_operand_list[i]) - int(second_operand_list[j]);
result_list.append(' ');
result_list.append(str(subtract));
result_list.append(' ');
elif k == '+':
add = int(first_operand_list[i]) + int(second_operand_list[j]);
result_list.append(' ');
result_list.append(str(add));
result_list.append(' ');
i += 3;
j += 3;
format_answers();
def to_third_row():
i = 2;
j = 2;
while i < len(first_operand_list) and j < len(second_operand_list):
if len(first_operand_list[i]) < len(second_operand_list[j]):
lines = '';
for k in range(0, len(second_operand_list[j]) + 2):
lines += '-';
line_list.append(lines);
line_list.append(' ');
elif len(first_operand_list[i]) > len(second_operand_list[j]):
lines = '';
for k in range(0, len(first_operand_list[i]) + 2):
lines += '-';
line_list.append(lines);
line_list.append(' ');
elif len(first_operand_list[i]) == len(second_operand_list[j]):
lines = '';
for k in range(0, len(first_operand_list[i]) + 2):
lines += '-';
line_list.append(lines);
line_list.append(' ');
i += 3;
j += 3;
if result:
to_answer();
def format_spaces():
i = 2;
j = 2;
while i < len(first_operand_list) and j < len(second_operand_list):
if len(first_operand_list[i]) == 1:
if len(second_operand_list[j]) == 1:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 2:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 3:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 4:
first_operand_list[i - 1] = ' ';
elif len(first_operand_list[i]) == 2:
if len(second_operand_list[j]) == 1:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 2:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 3:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 4:
first_operand_list[i - 1] = ' ';
elif len(first_operand_list[i]) == 3:
if len(second_operand_list[j]) == 1:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 2:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 3:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 4:
first_operand_list[i - 1] = ' ';
elif len(first_operand_list[i]) == 4:
if len(second_operand_list[j]) == 1:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 2:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 3:
first_operand_list[i - 1] = ' ';
elif len(second_operand_list[j]) == 4:
first_operand_list[i - 1] = ' ';
i += 3;
j += 3;
to_third_row();
def format_operators():
i = 2;
j = 2;
second_operand_list[0] = '';
first_operand_list[0] = '';
while i < len(first_operand_list) and j < len(second_operand_list):
if (len(first_operand_list[i]) < len(second_operand_list[j])):
second_operand_list[j - 1] = second_operand_list[j - 1] + ' ';
elif (len(first_operand_list[i]) > len(second_operand_list[j])):
larger_spaces = '';
if (len(second_operand_list[j])) == 3:
second_operand_list[j - 1] = second_operand_list[j - 1] + ' ';
elif (len(second_operand_list[j])) == 1:
for k in range(0, len(first_operand_list[i])):
larger_spaces += ' ';
first_operand_list[i - 1] = ' ';
second_operand_list[j - 1] = second_operand_list[j - 1] + larger_spaces;
else:
for k in range(0, len(first_operand_list[i]) - 1):
larger_spaces += ' ';
first_operand_list[i - 1] = ' ';
second_operand_list[j - 1] = second_operand_list[j - 1] + larger_spaces;
else:
second_operand_list[j - 1] = second_operand_list[j - 1] + ' ';
i += 3;
j += 3;
format_spaces();
def to_first_row(first_operand):
first_operand_list.append(' ');
first_operand_list.append(' ');
first_operand_list.append(str(first_operand));
if (len(first_operand_list) == len(problems) * 3) and (len(second_operand_list) == len(problems) * 3):
format_operators();
def to_second_row(second_operand, operator):
second_operand_list.append(' ');
second_operand_list.append(operator);
second_operand_list.append(str(second_operand));
if (len(first_operand_list) == len(problems) * 3) and (len(second_operand_list) == len(problems) * 3):
format_operators();
if len(problems) > 5:
return 'Error: Too many problems.';
for i in problems:
for j in i:
if j == '*' or j == '/':
return 'Error: Operator must be '+' or '-'.';
for k in problems:
k = k.split(' ');
for u in k:
if len(u) > 4 and len(u) > 4:
return 'Error: Numbers cannot be more than four digits.';
else:
try:
first_operand = int(k[0]);
operator = k[1];
second_operand = int(k[2]);
to_first_row(first_operand);
to_second_row(second_operand, operator);
except:
return 'Error: Numbers must only contain digits.';
if result:
return "".join(first_operand_list) + '\n' + "".join(second_operand_list) + '\n' + "".join(line_list) + '\n' + "".join(result_list);
else:
return "".join(first_operand_list) + '\n' + "".join(second_operand_list) + '\n' + "".join(line_list);
print(arithmetic_arranger(['24 + 85215', '3801 - 2', '45 + 43', '123 + 49']));
The error messages:
=================================== 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 ' 24 24 ... ----- ' == ' 3801 ...---- -----'
E - 3801 123
E - - 2 + 49
E - ------ -----
E + 24 24 32 32 32 3801 3801 3801 45 45 45 123 123 123 3801 3801 3801 123 123 123
E + + 85215 + 85215 + 698 + 698 +698 -2 -2 -2 +43 +43 +43 +49 +49 +49 -2 -2 -2 +49 +49 +49
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 ' 24 24 ... ----- ' == ' 1 ...--- ------'
E - 1 1
E - + 2 - 9380
E - --- ------
E + 24 24 32 32 32 3801 3801 3801 45 45 45 123 123 123 3801 3801 3801 123 123 123 1 1 1 1 1 1
E + + 85215 + 85215 + 698 + 698 +698 -2 -2 -2 +43 +43 +43 +49 +49 +49 -2 -2 -2 +49 +49 +49 +2 +2 +2 -9380 -9380 -9380
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 ' 24 24 ... ----- ' == ' 3 3...---- -----'
E - 3 3801 45 123
E - + 855 - 2 + 43 + 49
E - ----- ------ ---- -----
E + 24 24 32 32 32 3801 3801 3801 45 45 45 123 123 123 3801 3801 3801 123 123 123 1 1 1 1 1 1 3 3 3 3801 3801 3801 45 45 45 123 123 123
E + + 85215 + 85215 + 698 + 698 +698 -2 -2 -2 +43 +43 +43 +49 +49 +49 -2 -2 -2 +49 +49 +49 +2 +2 +2 -9380 -9380 -93...
E
E ...Full output truncated (2 lines hidden), use '-vv' to show
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 ' 24 24 ... ----- ' == ' 11 38...--- ------'
E - 11 3801 1 123 1
E - + 4 - 2999 + 2 + 49 - 9380
E - ---- ------ --- ----- ------
E + 24 24 32 32 32 3801 3801 3801 45 45 45 123 123 123 3801 3801 3801 123 123 123 1 1 1 1 1 1 3 3 3 3801 3801 3801 45 45 45 123 123 123 11 11 11 3801 3801 3801 1 1 1 123 123 123 1 1 1
E + + 85215 + 85215 + 698 + 698 +698 -2 ...
E
E ...Full output truncated (2 lines hidden), use '-vv' to show
test_module.py:77: AssertionError
____________________ test_template[test_incorrect_operator] ____________________
arguments = [['3 / 855', '3801 - 2', '45 + 43', '123 + 49']]
expected_output = "Error: Operator must be '+' or '-'."
fail_message = 'Expected calling "arithmetic_arranger()" with a problem that uses the "/" operator to return "Error: Operator must be \'+\' or \'-\'."'
@pytest.mark.parametrize('arguments,expected_output,fail_message', test_cases)
def test_template(arguments, expected_output, fail_message):
> actual = arithmetic_arranger(*arguments)
test_module.py:76:
TypeError: unsupported operand type(s) for -: 'str' and 'str'
arithmetic_arranger.py:173: TypeError
_______________ 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 ' 24 24 ... ----- \n' == ' 3 9... 858 1028'
E + 24 24 32 32 32 3801 3801 3801 45 45 45 123 123 123 3801 3801 3801 123 123 123 1 1 1 1 1 1 3 3 3 3801 3801 3801 45 45 45 123 123 123 11 11 11 3801 3801 3801 1 1 1 123 123 123 1 1 1 24 24 3 3 3 988 988 988
E + + 85215 + 85215 + 698 + 698 +698 -2 -2 -2 +43 +43 +43 +49 +49 +49 -2 -2 -2 ...
E
E ...Full output truncated (6 lines hidden), use '-vv' to show
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 ' 24 24 ... ----- \n' == ' 32 ... 172 1028'
E + 24 24 32 32 32 3801 3801 3801 45 45 45 123 123 123 3801 3801 3801 123 123 123 1 1 1 1 1 1 3 3 3 3801 3801 3801 45 45 45 123 123 123 11 11 11 3801 3801 3801 1 1 1 123 123 123 1 1 1 24 24 3 3 3 988 988 988 32 32 32 1 1 1 45 45 45 123 123 123 988 988 988
E + + 85215 + 852...
E
E ...Full output truncated (6 lines hidden), use '-vv' to show
test_module.py:77: AssertionError