Arithmetic arranger, how to debug interaction with


On my 3rd week of learning python now, enjoying it, apart from the inevitable head aches!

I’ve been writing my code in pycharm, rather than replit, as I know how to debug there. I’ve hardcoded calls to arithmetic_arranger into it, with the ‘problems’ from formatted in a single pair of braces. Works great.

But has them doubled, to contain the optional argument. Silly me, should have checked there first!

If I hardcode in double braces I get the understandable error ‘list’ object has no attribute ‘split’. Fair enough…

But then my code failed on the arguments at lines 41 and 51 of the test_module; it’s never done that in pycharm. ( ‘Operator must be ‘+’ or ‘-’.’ and ‘Error: Numbers must only contain digits’)

This is so different to it’s behaviour in pycharm that its got me stumped. And theres nothing helpful in the traceback (will post a screengrab of that if queried.)
So I was going to run in pycharm, so I can step through its operation. But theres a lot in there thats new to me, calls to libraries/modules that are unfamiliar, and I’m wondering if that’s even the best strategy in this situation.

def arithmetic_arranger(problems, prnt_ans=None):

    top_l =''
    btm_l =''
    dash_l =''
    ans_l =''

    for s in problems:
        if len(problems) > 5: return'Error: Too many problems.'
        lst = s.split()
        if not lst[0].isdigit() or not lst[2].isdigit(): return'Error: Numbers must only contain digits."'
        if len(lst[0]) > 4 or len(lst[2]) > 4: return'Error: Numbers cannot be more than four digits.'
        if lst[1] != '+' and lst[1] != "-": return"Error: Operator must be ' + ' or ' - '."

        calc = {'+': lambda x, y: x + y, '-': lambda x, y: x - y}
        ans = str((calc[lst[1]](int(lst[0]), int(lst[2]))))

        n = max(len(lst[0]) + 2, len(lst[2]) + 2, len(ans))
        top_l = top_l + " " * (n - len(lst[0])) + ((lst[0]) + '    ')
        btm_l = btm_l + ((lst[1]).ljust(n -len(lst[2]))  + (lst[2]) + '    ')
        dash_l = dash_l + "-" * n + '    '
        ans_l = ans_l + ans.rjust(n) + '    '

    arranged_problems = (top_l.rstrip() + '\n' + btm_l.rstrip() + '\n' + dash_l.rstrip())
    if prnt_ans: arranged_problems = (top_l.rstrip() + '\n' + btm_l.rstrip() + '\n' + dash_l.rstrip() + '\n' + ans_l.rstrip())
    return arranged_problems

problems = [['44 + 815', '909 - 2', '45 + 43', '123 + 49', '888 + 40', '653 + 87']]

I ran it without the last 2 lines on replit. Its at but might have changed by the time anyone reads it.

Any debugging advice would be welcome here.

Reading the error message helps :wink:

Number 1:

- Error: Operator must be '+' or '-'.
+ Error: Operator must be ' + ' or ' - '.
?                          + +      + +

There shouldn’t be spaces around the operators.

Number 2:

- Error: Numbers must only contain digits.
+ Error: Numbers must only contain digits."
?                                         +

There is a random double-quotes in your string.
Also I do not know why the forum only colored in the second error… But if you are wondering, you’d need to look into the test-cases, which input to the assertion is the expected output and which is yours. Or just look which looks wrong, as indicated by the “+” in the “?” line.

Well that’s all rather embarrassing! I don’t remember changing those error statements, I cut and pasted them in from the markup, and never even looked at them again. Or so I thought… Thanks for that one, it works now.

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