Python Help with Python: Implementing Algorithm

  • Thread starter Thread starter FallArk
  • Start date Start date
  • Tags Tags
    Python
Click For Summary
The discussion focuses on implementing a Python algorithm to evaluate mathematical expressions represented as lists of strings. Users are exploring how to handle operations like addition, subtraction, multiplication, and division, as well as the evaluation of parenthesized expressions. Key points include the need for recursive function calls to handle nested expressions and the importance of correctly managing the position index while parsing the input list. Participants also discuss how to structure the functions to ensure proper order of operations, emphasizing that multiplication has higher precedence than addition. The conversation highlights the challenges of implementing the algorithm and the collaborative effort to clarify the logic behind the code.
  • #31
Working solution:
Code:
def eval_infix_sum(expr,pos):
    ans, pos = eval_infix_product(expr,pos)
    while expr[pos] == '+' or expr[pos] == '-':
        if expr[pos] == '+':
            rhs,pos = eval_infix_product(expr,pos + 1)
            ans = ans + rhs
        elif expr[pos] == '-':
            rhs,pos = eval_infix_product(expr,pos + 1)
            ans = ans - rhs
    return ans,pos
def eval_infix_product(expr,pos):
    ans,pos = eval_infix_factor(expr,pos)
    while expr[pos] == '*' or expr[pos] == '/' or expr[pos] == '%':
        if expr[pos] == '*':
            rhs,pos = eval_infix_factor(expr,pos + 1)
            ans = ans * rhs
        elif expr[pos] == '/':
            rhs,pos = eval_infix_factor(expr,pos + 1)
            ans = ans / rhs
        elif expr[pos] == '%':
            rhs,pos = eval_infix_factor(expr,pos + 1)
            ans = ans % rhs
    return ans,pos
def eval_infix_factor(expr,pos):
    if expr[pos] == '(':
        ans,pos = eval_infix_sum(expr,pos+1)
        return ans,pos+1
    else:
        return int(expr[pos]),pos+1
def eval_infix_list(expr):
    ans,discard = eval_infix_sum(expr,0)
    return ans
def eval_infix(expr):
    return eval_infix_list(expr.split() + [ ";"])
Working on making it support minus(es?):p
 
Technology news on Phys.org
  • #32
Looks good! (Yes)
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 7 ·
Replies
7
Views
5K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
Replies
3
Views
4K
  • · Replies 6 ·
Replies
6
Views
4K
Replies
9
Views
3K
  • · Replies 4 ·
Replies
4
Views
6K
  • · Replies 13 ·
Replies
13
Views
4K
Replies
1
Views
2K