Need Help on Arithmetic Formatter

Hi I am stuck in this first test which is the Arithmetic Formatter

 import re


def arithmetic_arranger(problems, solve = False):
  # this
  # ["32 + 698", "3801 - 2", "45 + 43", "123 + 49"]

  # into this
  # "    32  3801     45    123\n+  698  -  2  +  43  +  49\n ------ ----  -----  -----"

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


  first = ""
  second = ""
  lines = ""
  sumx = ""
  string = ""

  for problem in problems:
    if(re.search("[^\s0-9.+-]", problem)):
      if(re.search("[/]", problem) or re.search("(*)", problem)):
        return "Error: Operator must be '+' or '-'."
      return "Error: Numbers must only contain digits."

    firstNumber = problem.split(" ")[0]
    operator = problem.split(" ")[1]
    secondNumber = problem.split(" ")[2]

    if(len(firstNumber) >= 5 or len(secondNumber) >= 5):
      return "Error: Numbers cannot be more than four digits."

    sum = ""
    if(operator == "+"):
      sum = str(int(firstNumber) + int(secondNumber))
    elif(operator == "-"):
      sum = str(int(firstNumber) - int(secondNumber))
    
    length = max(len(firstNumber), len(secondNumber)) + 2
    top = str(firstNumber).rjust(length)
    botton = operator + str(secondNumber).rjust(length - 1)
    line = ""
    res = str(sum).rjust(length)
    for s in range(length):
      line += "-"

    if problem != problem[-1]:
      first += top + '   '
      second += botton + '   '
      lines += line + '   '
      sumx += res + '   '
    else:
      first += top
      second += bottom
      lines += line
      sumx += res

  if solve:
    string = first + "\n" + second + "\n" + lines + "\n" + sumx
  else:
    string = first + "\n" + second + "\n" + lines
  return string

I am getting the following output

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

======================================================================
FAIL: test_only_digits (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/boilerplate-arithmetic-formatter-3/test_module.py", line 34, in test_only_digits
    self.assertEqual(actual, expected, 'Expected calling "arithmetic_arranger()" with a problem that contains a letter character in the number to return "Error: Numbers must only contain digits."')
AssertionError: '  98     3801     45     123   \n+ 35   -[52 chars]-   ' != 'Error: Numbers must only contain digits.'
+ Error: Numbers must only contain digits.-   98     3801     45     123   
- + 35   -    2   + 43   +  49   
- ----   ------   ----   -----    : Expected calling "arithmetic_arranger()" with a problem that contains a letter character in the number to return "Error: Numbers must only contain digits."

======================================================================
FAIL: test_solutions (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/boilerplate-arithmetic-formatter-3/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 arithmetic problems and a second argument of `True`.')
AssertionError: '   32        1     45     123   \n- 698   - 3801   + 4[76 chars]2   ' != '   32         1      45      123\n- 698    - 3801    +[76 chars] 172'
-    32        1     45     123   
?                              ---
+    32         1      45      123
?              + +       +
- - 698   - 3801   + 43   +  49   
?                              ---
+ - 698    - 3801    + 43    +  49
?         +         +       +
- -----   ------   ----   -----   
?                              ---
+ -----    ------    ----    -----
?      +            +    +
-  -666    -3800     88     172   ?                              ---
+  -666     -3800      88      172?      +              +  +
 : Expected solutions to be correctly displayed in output when calling "arithmetic_arranger()" with arithmetic problems and a second argument of `True`.

======================================================================
FAIL: test_too_many_problems (test_module.UnitTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/runner/boilerplate-arithmetic-formatter-3/test_module.py", line 19, in test_too_many_problems
    self.assertEqual(actual, expected, 'Expected calling "arithmetic_arranger()" with more than five problems to return "Error: Too many problems."')
AssertionError: 'Error: Too many problems' != 'Error: Too many problems.'
- Error: Too many problems
+ Error: Too many problems.
?                         +
 : Expected calling "arithmetic_arranger()" with more than five problems to return "Error: Too many problems."

----------------------------------------------------------------------
Ran 6 tests in 0.080s

FAILED (failures=4)
 

Your browser information:

User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Safari/605.1.15.

Challenge: Arithmetic Formatter

Link to the challenge:

Please provide a link to your code. The format of your error messages is kinda weird.
Also for a start:
I think your first RegEx is wrong, because you fail the test for non-numbers as inputs.
Read the error messages - the “to many problems” error has a different of a single symbol :wink:

1 Like

@Jagaya Hi, Thank you so much for your time. Here is a link to my project so far https://repl.it/@lyndonmenezes/boilerplate-arithmetic-formatter-3

Yes I did think that the first regular expression is wrong. To be honest it is quite complicated as we have different files to execute different code. But nonetheless I will get my best on this project.

I’ve edited your post for readability. When you enter a code block into a forum post, please precede it with a separate line of three backticks and follow it with a separate line of three backticks to make it easier to read.

You can also use the “preformatted text” tool in the editor (</>) to add backticks around text.

See this post to find the backtick on your keyboard.
Note: Backticks (`) are not single quotes (’).

1 Like

@ilenia Thank you for the tip. Will definitely use this in the future.

Personally I used try-except to test for numbers - I would need to check RegEx myself to see what’s wrong.

For the error message:
The symbols mark your output (-), expected output (+) and an indication for the difference (?)

If you look at your output and the expected, you should notice the difference.

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