Can someone help with my project?

Hi everybody! thank you in advance for reading this and trying to help, just finished the python course so I’m still learning…
just coded the arithmetic arranged function, But I’m getting 2 fails and i don’t know why.

Here’s my code:

import operator
def conv_i(x):
    try:
      x = int(x)
      return True
    except:
      return False


def arithmetic_arranger(problems, con= False):
    arr = ""
    
    signs = {"+":operator.add, "-":operator.sub}
    row1 = [*range(len(problems))]
    row2 = [*range(len(problems))]
    row3 = [*range(len(problems))]
    sign = [*range(len(problems))]

    if len(problems) > 5:
        return print("Error: Too many problems.")
    
    x = 0
    for i in problems:
        row1[x], sign[x], row2[x] = i.split()
        n = i.split()
        
        if len(row1[x]) > 4 or len(row2[x]) > 4:
            return print("Error: Numbers cannot be more than four digits.")
        elif sign[x] not in signs:
            return print("Error: Operator must be '+' or '-'.")
        elif conv_i(row1[x]) and conv_i(row2[x]) is False:
            return print("Error: Numbers must contain only digits.")
        x+= 1
        
    y=0
    for i in range(len(problems)):
        row3[y]= str(signs[sign[y]](int(row1[y]), int(row2[y])))
        y+=1
        
    
#Now we need to format row1
    for i in range(len(problems)):
      diff = max(len(row1[i]), len(row2[i])) + 2 
      if i == 3:
        arr += str(" "*(diff-len(row1[i]))+ row1[i])
        continue
      arr += str(" "*(diff-len(row1[i]))+ row1[i] + " "*4)
    arr+= str("\n")

    #format row2
    for i in range(len(problems)):
      diff = max(len(row1[i]), len(row2[i])) + 1
      if i == 3:
        arr += str(sign[i]+" "*(diff-len(row2[i]))+ row2[i])
        continue
      arr += str(sign[i]+" "*(diff-len(row2[i]))+ row2[i] + " "*4)
    arr += str("\n")
    
    #format lines
    for i in range(len(problems)):
        diff = max(len(row1[i]), len(row2[i])) + 2 
        if i == 3:
          arr += str("-"*diff)
          continue
        arr += str("-"*diff + " "*4)
    arr += str("\n")
    
    #format optional results
    
    
    if con:
        for i in range(len(problems)):
            diff = max(len(row1[i]), len(row2[i])) + 2
            if i == 3:
              arr+= str(" "*int(diff-len(row3[i])) + row3[i])
              continue
            arr+= str(" "*int(diff-len(row3[i])) + row3[i] + (" "*4))

return arithmetic_arranger

and these are the fails:

FAIL: test_arrangement (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/Aritarranger/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: <function arithmetic_arranger at 0x7f20a1627940> != '    3      3801      45      123\n+ 855 [56 chars]----' : Expected different output when calling "arithmetic_arranger()" with ["3 + 855", "3801 - 2", "45 + 43", "123 + 49"]

======================================================================
FAIL: test_solutions (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/Aritarranger/test_module.py", line 39, in test_solutions
    self.assertEqual(actual, expected, 'Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with arithemetic problems and a second argument of `True`.')
AssertionError: <function arithmetic_arranger at 0x7f20a1627940> != '   32         1      45      123\n- 698 [90 chars] 172' : Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with arithemetic problems and a second argument of `True`.

if you run my program, you’ll get the exact same results.
what did i do wrong?

In the function arithmetic_arranger are you returning the wrong variable?
I think you want to return arr instead of arithmetic_arranger

1 Like

Hey i think your right! just ran with “return arr” and no Fails ! thank you!
edit: Oops spoke to soon…

FAIL: test_arrangement (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/Aritarranger/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: '    [36 chars]   -    2    + 43    +  49\n-----    ------    ----    -----\n' != '    [36 chars]   -    2    + 43    +  49\n-----    ------    ----    -----'
      3      3801      45      123
  + 855    -    2    + 43    +  49
- -----    ------    ----    -----
?                                 -
+ -----    ------    ----    ----- : Expected different output when calling "arithmetic_arranger()" with ["3 + 855", "3801 - 2", "45 + 43", "123 + 49"]

it seems like it something to do with the “\n” at the end of the dashes.

Can you give me full link of your test ?
Look like you do not pass the unit test case.

ALRIGHT! i fixed it!! thank you for the input , but I’ve finally figured out.
the problem was the line at the end, so I’ve changed the code to only use the line if needed for the results. worked!

1 Like

Sorry for late response.
I also saw your code work perfectly.

Congrats.

1 Like