Arithmetic Arranger failing when solve set to True

Tell us what’s happening:
I’m nearly done with the arithmetic arranger challenge. When I set solve to False it passes all tests, but when I set it to True, it fails one, and I can’t see why because the output looks fine. Anyone who knows how to fix this?

Your code so far

def arithmetic_arranger(problems, solve=True):

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

x = []
N1 = 0
N2 = 0
OP = ""
sum_output = ""
first = ""
second = ""
lines = ""
sumx = 0
sumxstr = ""

for i in problems:
    x = i.split()

    try:
        N1 = int(x[0])
        N2 = int(x[2])
    except:
        return("Error: Numbers must only contain digits.")

    OP = x[1]

    if OP != "+" and OP != "-":
        return("Error: Operator must be '+' or '-'.")
    
    if len(str(N1)) > 4 or len(str(N2)) > 4:
        return("Error: Numbers cannot be more than four digits.")

    if OP == "+":
        sumx = N1 + N2
    if OP == "-":
        sumx = N1 - N2

    max_len = max(str(N1), str(N2), key=len)
    min_len = min(str(N1), str(N2), key=len)
    ar_max_len = int(len(max_len)) + 2
    ar_min_len = int(len(min_len))
    N1_aligned = str(N1).rjust(ar_max_len)
    N2_aligned = str(N2)
    sumx_aligned = str(sumx).rjust(ar_max_len)

    if len(str(N2)) < len(str(N1)):
        N2_aligned = str(N2).rjust(int(len(max_len)))

    line = '-' * ar_max_len

    if i != problems[-1]:
      first += N1_aligned + '    '
      second += OP + ' ' + N2_aligned + '    '
      lines += line + '    '
      sumxstr += sumx_aligned + '    '
    else:
      first += N1_aligned 
      second += OP + ' ' + N2_aligned
      lines += line 
      sumxstr += sumx_aligned

if solve == True:
    sum_output = first + "\n" + second + "\n" + lines + "\n" + sumxstr
else:
    sum_output = first + "\n" + second + "\n" + lines 
return sum_output

Output

   32      3801      45      123
+ 698    -    2    + 43    +  49
-----    ------    ----    -----
  730      3799      88      172
F.....
======================================================================
FAIL: test_arrangement (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/boilerplate-arithmetic-formatter-1/test_module.py", line 10, in test_arrangement
    self.assertEqual(actual, expected, 'Expected different output when calling "arithmetic_arranger()" with ["3 + 855", "3801 - 2", "45 + 43", "123 + 49"]')
AssertionError: '    [68 chars]-    ------    ----    -----\n  858      3799      88      172' != '    [68 chars]-    ------    ----    -----'
      3      3801      45      123
  + 855    -    2    + 43    +  49
- -----    ------    ----    -----
?                                 -
+ -----    ------    ----    ------   858      3799      88      172 : Expected different output when calling "arithmetic_arranger()" with ["3 + 855", "3801 - 2", "45 + 43", "123 + 49"]

----------------------------------------------------------------------
Ran 6 tests in 0.002s

FAILED (failures=1)

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0

Challenge: Arithmetic Formatter

Link to the challenge:

It’s saying that you should not have the solutions there

The value in the function definition is the defaut value, which is used when no other value is provided. The instructions required the default value to be False, which means that the default behavior should be to not show the solutions.

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