简单计算器

要实现计算器就需要明白什么是中缀表达式和什么实后缀表达式,中缀表达式即运算符在数字之间,后缀表达式就是运算符在数字之后,要实现计算器就需要把中缀表达式转化为后缀表达式,然后再计算后缀表达式

中缀表达式转后缀表达式的方法:
1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
6.最终将栈中的元素依次出栈,输出。

中缀表达式转化为后缀表达式计算机实现

def infix2suffix(infix):
    symbol =[]
    list =[]
    cs = infix.encode("utf-8")
    sb=bytearray()
    for c in cs:
        if c == 40:
            symbol.append(c)
            if len(sb)>0:
                list.append(sb.decode("utf-8"))
                sb=bytearray()
        elif c ==41:
            ch=symbol.pop()
            if len(sb)>0:
                list.append(sb.decode("utf-8"))
                sb.clear()
            while ch != 40:
                list.append(byte2str(ch))
                if len(symbol)<=0:
                    break
                ch=symbol.pop()
        elif c == 43 or c == 45:
            if len(sb)>0:
                list.append(sb.decode("utf-8"))
                sb.clear()
            if len(symbol)<=0:
                symbol.append(c)
                continue
            ch=symbol[-1]
            while ch != 40:
                list.append(byte2str(symbol.pop()))
                if len(symbol)<=0:
                    break
                ch=symbol[-1]
            symbol.append(c)
        elif c == 42 or c ==47:
            if len(sb)>0:
                list.append(sb.decode("utf-8"))
                sb.clear()
            if len(symbol)<=0:
                symbol.append(c)
                continue
            ch=symbol[-1]
            while ch != 40 and ch != 43 and ch != 45:
                list.append(byte2str(symbol.pop()))
                if len(symbol)<=0:
                    break
                ch=symbol[-1]
            symbol.append(c)
        elif c == 94:
            if len(sb)>0:
                list.append(sb.decode("utf-8"))
                sb.clear()
            if len(symbol)<=0:
                symbol.append(c)
                continue
            ch=symbol[-1]
            while ch != 40 & ch != 43 and ch != 45and ch != 42and ch != 47:
                list.append(byte2str(symbol.pop()))
                if len(symbol)<=0:
                    break
                ch=symbol[-1]
            symbol.append(c)
        else:
            sb.append(c)
    if len(sb)>0:
        list.append(sb.decode("utf-8"))
        sb.clear()
    while len(symbol)>0:
        list.append(byte2str(symbol.pop()))
    return list


def byte2str(by):
    cb=bytearray()
    cb.append(by)
    return cb.decode("utf-8")

计算后缀表达式

  

def calculateSuffix(list):
    num=[]
    for c in list:
        if "+"==c:
            a=num.pop()
            b=num.pop()
            num.append(a+b)
        elif "-"==c:
            a=num.pop()
            b=num.pop()
            num.append(b-a)
        elif "*"==c:
            a=num.pop()
            b=num.pop()
            num.append(a*b)
        elif "/"==c:
            a=num.pop()
            b=num.pop()
            num.append(b/a)
        elif "^"==c:
            a=num.pop()
            b=num.pop()
            num.append(pow(b, a));
        else:
            num.append(float(c));
    return num.pop()

简单的实现了加减乘除指数运算,想要更多的运算自己稍微修改就可以了

源码地址https://download.csdn.net/download/qq_27012285/10766066

java下载地址https://download.csdn.net/download/qq_27012285/10766082

点赞