# Scientific Computing with Python Projects - Arithmetic Formatter

Hi all,

I cannot for the life of me figure out why this solution doesn’t pass the automated tests. When I run this in the terminal, the math problems come out formatted exactly like shown in the assignment description.

(I realize this isn’t the most concise code and needs to be refactored/DRY’d out, but for now I just want to know why the functionality isn’t working as expected).

``````import re

def arithmetic_arranger(problems, show_solution=False):
problem_dictionaries = []
first_line = ""
second_line = ""
third_line = ""
fourth_line = ""
#Error handling (all working as expected):
if len(problems) > 5:
return "Error: Too many problems."
for problem in problems:
if any(char.isalpha() for char in problem):
return "Error: Numbers must only contain digits."
elif any(char in ["*", "/"] for char in problem):
return "Error: Operator must be '+' or '-'."
else:
nums = re.findall(r"\d+", problem)
for num in nums:
if len(num) > 4:
return "Error: Numbers cannot be more than four digits."
#Creating a dictionary out of each math problem
for problem in problems:
parsed_problem = {}
nums = re.findall(r"\d+", problem)
operator = re.findall(r"[+-]", problem)
if operator == "+":
solution = int(nums) + int(nums)
if operator == "-":
solution = int(nums) - int(nums)
problem_width = max(len(str(abs(solution))), len(str(nums)),
len(str(nums))) + 2
if problem_width < 3:
problem_width = 3
elif problem_width > 6:
problem_width = 6
parsed_problem['first_num'] = nums
parsed_problem['operator'] = operator
parsed_problem['second_num'] = nums
parsed_problem['width'] = problem_width
parsed_problem['solution'] = str(solution)
problem_dictionaries.append(parsed_problem)
#Formatting each dictionary into lines
if show_solution:
for problem_dict in problem_dictionaries:
for _ in range(
1,
problem_dict['width'] - (len(problem_dict['first_num']))):
first_line += " "
first_line += problem_dict['first_num']
first_line += "     "

second_line += problem_dict['operator']
for _ in range(
1,
problem_dict['width'] - (len(problem_dict['second_num']))):
second_line += " "
second_line += problem_dict['second_num']
second_line += "    "

for _ in range(0, problem_dict['width']):
third_line += "_"
third_line += "    "

for _ in range(
0, problem_dict['width'] - len(problem_dict['solution'])):
fourth_line += " "
fourth_line += problem_dict['solution']
fourth_line += "    "

arranged_problems = f"{first_line}\n{second_line}\n{third_line}\n{fourth_line}"

else:
for problem_dict in problem_dictionaries:
for _ in range(
1,
problem_dict['width'] - (len(problem_dict['first_num']))):
first_line += " "
first_line += problem_dict['first_num']
first_line += "     "

second_line += problem_dict['operator']
for _ in range(
1,
problem_dict['width'] - (len(problem_dict['second_num']))):
second_line += " "
second_line += problem_dict['second_num']
second_line += "    "

for _ in range(0, problem_dict['width']):
third_line += "_"
third_line += "    "

arranged_problems = f"{first_line}\n{second_line}\n{third_line}"

return arranged_problems

``````

Can you provide the error messages?

I suspect you have too many spaces at the end of each line.

… can you provide the error messages? It’s harder for me to help without those