python四则运算

源代码已经保存至https://github.com/SQHZ/LSQ

题目:

  (1)能自动生成小学四则运算题目,并且不能出现负数;

  (2)能支持真分数的四则运算;

 

代码实现:

import re

 

def myCalculate(mystr):

    if (mystr.__contains__("(")):

        start = mystr.rindex("(")

        lstr = mystr[0:start]

        tmpstr = mystr[start + 1:]

        end = tmpstr.index(")")

        rstr = tmpstr[end + 1:]

        nowstr = tmpstr[0:end]

        newstr = lstr + str(myCalculate(nowstr)) + rstr

        return myCalculate(newstr)

    else:

        return calcNoSym(mystr)

 

 

def calcNoSym(string):

    if (string.__contains__("*")):

        string = getNewStr(string, "*")

        return calcNoSym(string)

    if (string.__contains__("/")):

        string = getNewStr(string, "/")

        return calcNoSym(string)

    if (string.__contains__("+")):

        string = getNewStr(string, "+")

        return calcNoSym(string)

    if (string.__contains__("-")):

        string = getNewStr(string, "-")

        return calcNoSym(string)

    return string

 

 


def getNewStr(string, op):

    start = string.index(op)

    lstr = string[0:start]

    rstr = string[start + 1:]

    lnum = re.search('\d+$', lstr).group()

    rnum = re.search('\d+', rstr).group()

    newstr = lstr.rstrip(lnum) + str(calcs(lnum, rnum, op)) + rstr.lstrip(rnum)

    return newstr

 

 

def calcs(a, b, op):

    if (op == "+"):

        return int(a) + int(b)

    elif (op == "-"):

        return int(a) - int(b)

    elif (op == "*"):

        return int(a) * int(b)

    elif (op == "/"):

        return int(a) / int(b)

    else:

        raise "error"

 

 

string = "11*22*3/4"

 

print(myCalculate(string))

sexp = "512+((112+212)*2-312)"

print(myCalculate(sexp))

 

 测试运行:

 

 

 

 

效能分析:

PSP表格:

posted @ 2019-03-21 15:37  LSQHZ  阅读(141)  评论(0)    收藏  举报