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表格:


浙公网安备 33010602011771号