Cod sursa(job #3267937)

Utilizator Shaan_StefanShaan Stefan Shaan_Stefan Data 13 ianuarie 2025 08:10:39
Problema Evaluarea unei expresii Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 2.47 kb
import math

expression_string = "0"
pos = 0

def number():
    global pos
    num=0
    stpos=pos

    if(expression_string[pos] == '+' or expression_string[pos] == '-'):
        pos = pos + 1

    while(pos < len(expression_string) and (expression_string[pos].isdigit() == True or expression_string[pos] == '.')):
        #print(int(expression_string[pos]))
        pos = pos + 1  

    if(pos == stpos):
        pos=len(expression_string)+2
        return -1

    num = float(expression_string[stpos:pos])
    #print(num)
    return num


def term():
    global pos
    result = 0
    if(expression_string[pos] == '('):
        pos = pos + 1
        result = expression()
        pos = pos + 1
    else:
        result = number()
    
    while(pos < len(expression_string) and (expression_string[pos] == '*' or expression_string[pos] == '/' or expression_string[pos] == '(')):
        new_num = 0

        prod = True
        if(expression_string[pos] == '*'):
            prod = 1
        elif(expression_string[pos] == '/'):
            prod = 0
        else:
            prod = 1
            pos = pos - 1
        

        pos = pos + 1


        if(expression_string[pos] == '('):
            pos = pos + 1
            new_num = expression()
            pos = pos + 1
        else:
            new_num = number()
        
        if(prod == 1):
            result = result * new_num
        elif(prod == 0 and new_num != 0):
            result = result / new_num
        else:
            pos=len(expression_string)+4
    #print(result)
    return result



def expression():
    global pos
    result = term()

    while(pos < len(expression_string) and (expression_string[pos] == "+" or expression_string[pos] == "-")):

        sign = -1
        if(expression_string[pos] == "+"):
            sign = 1
        pos = pos + 1

        result = result + term() * sign

    #print(result)
    return result

'''
print("Calculator test!\nEnter any mathematical expression using '(' ')' '+' '-' '*' or '/'\nType 'quit' to exit")
while(True):
    expression_string = input('>>>')
    if(expression_string == "quit"):
        break
    pos = 0
    result = expression()
    if(pos != len(expression_string) and pos != len(expression_string)+4):
        print("Invalid string")
    elif(pos==len(expression_string)+4):
        print("Invalid expression")
    else:
        print(result)
'''
pos=0

inf = open("evaluare.in", "+r")
ouf = open("evaluare.out", "+w")
expression_string = inf.read()
ouf.write(str(int(expression())))