`

python 实现简单的数字字符串四则运算

 
阅读更多

#!/usr/bin/python
#  -*- coding: utf-8 -*-

import  re

# sexp = "512+((112+212)*2-312)"
# 主函数入口
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(num1, num2,op):
    if(op=="+"):
        return int(num1)+int(num2)
    elif(op=="-"):
         return int(num1)-int(num2)
    elif(op=="*"):
         return int(num1)*int(num2)
    elif(op=="/"):
         return int(num1)/int(num2)
    else:
        raise "error"

string="11*22*3/4"

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

 

分享到:
评论
2 楼 xdx2599 2016-01-28  
#!/usr/bin/python
#  -*- coding: utf-8 -*-

import  re
import math

# sexp = "512+((112+212)*2-312)"
# 主函数入口
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.isdigit()):
        return string
    if(string.startswith("-")):
        if(string[1:].isdigit()):
            return string
    if(string.__contains__("*")):
        string=getNewStr(string,"*")
        return calcNoSym(string)
    elif(string.__contains__("/")):
        string=getNewStr(string,"/")
        return calcNoSym(string)
    elif(string.__contains__("+")):
        string=getNewStr(string,"+")
        return calcNoSym(string)
    elif(string.__contains__("-")):
        if(string.startswith("-")):
                if(string[1:].isdigit()):
                    return string
        else:
            string=getNewStr(string,"-")
            return calcNoSym(string)
    return string

def isOperator(str):
    if(str=="+" or str=="-" or str=="*" or str=="/"):
        return True
    else:
        return False


def getNewStr(string,op):
            start = string.index(op)
            lstr=string[0:start]
            rstr=string[start+1:]
            #如果左侧是运算符
            lone = lstr[start-1:start]
            rone = rstr[start+1:start+2]
            if(isOperator(rone)):
                rstr=rstr[start+1:]
            lres = re.search('\d+$',lstr)
            if(lres):
                lnum =lres.group()
            else:
                lnum=lstr
            rres =re.search('\d+',rstr)
            if(rres):
                rnum =rres.group()
            else:
                rnum=rstr
            if(isOperator(rone)):
                rnum=rone+rnum
            if(isOperator(lone)):
                rnum=op+rnum
                op = lone
            if(rnum=="" or lnum==""):
                centerstr=lnum+rnum
            else:
                centerstr=str(calcs(lnum,rnum,op))
            newstr = lstr.rstrip(lnum)+centerstr+rstr.lstrip(rnum)
            return newstr

def calcs(num1, num2,op):
    if(op=="+"):
        return  round(int(num1)+int(num2),0)
    elif(op=="-"):
         return round(int(num1)-int(num2),0)
    elif(op=="*"):
         return round(int(num1)*int(num2),0)
    elif(op=="/"):
         return round(int(num1)/int(num2),0)
    else:
        raise "error"

# string="11*22*3/4"
#
# print(myCalculate(string))
# sexp = "512+((112+212)*2-312)"
# print(myCalculate(sexp))

test="1-2*((4*3))"
print(myCalculate(test))
# rres =re.search('\d+',test)
# print(rres)
#
# a="-1"
# print(a.startswith("-"))
# print(a[1:].isdigit())
1 楼 xdx2599 2016-01-27  
#!/usr/bin/python
#  -*- coding: utf-8 -*-

import  re
import math

# sexp = "512+((112+212)*2-312)"
# 主函数入口
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)
    elif(string.__contains__("/")):
        string=getNewStr(string,"/")
        return calcNoSym(string)
    elif(string.__contains__("+")):
        string=getNewStr(string,"+")
        return calcNoSym(string)
    elif(string.__contains__("-")):
        string=getNewStr(string,"-")
        return calcNoSym(string)
    return string


def getNewStr(string,op):
        # if(string.isdigit):
        #     return string
        # else:
            start = string.index(op)
            lstr=string[0:start]
            rstr=string[start+1:]
            lres = re.search('\d+$',lstr)
            if(lres):
                lnum =lres.group()
            else:
                lnum=lstr
            # print(lres)
            # if (lres):
            #     print(lres)
            #     print(lstr)
            rres =re.search('\d+',rstr)
            if(rres):
                rnum =rres.group()
            else:
                rnum=rstr
            newstr = lstr.rstrip(lnum)+str(calcs(lnum,rnum,op))+rstr.lstrip(rnum)
            return newstr

def calcs(num1, num2,op):
    if(op=="+"):
        return  round(int(num1)+int(num2),0)
    elif(op=="-"):
         return round(int(num1)-int(num2),0)
    elif(op=="*"):
         return round(int(num1)*int(num2),0)
    elif(op=="/"):
         return round(int(num1)/int(num2),0)
    else:
        raise "error"

# string="11*22*3/4"
#
# print(myCalculate(string))
# sexp = "512+((112+212)*2-312)"
# print(myCalculate(sexp))

test="1-2*((4*3))"
print(myCalculate(test))

相关推荐

    python实现的四则运算计算器

    在Python编程语言中,实现一个四则运算计算器是一项基础但重要的任务,它涉及到字符串解析、数学运算以及错误处理等核心概念。以下是对这个四则运算计算器实现的详细讲解。 首先,`calc.py`文件很可能是整个计算器...

    使用python编写的随机生成四则运算程序.zip

    标题中的“使用python编写的随机生成四则运算程序”指的是一个使用Python编程语言设计的软件,该软件能够自动生成包含加、减、乘、除四种基本数学运算的算术问题。这种程序通常用于教育目的,帮助学生练习和提高他们...

    python深入数字与字符串

    本文将详细讲解Python中的数字运算和字符串处理的相关知识点。 首先,我们来看增强赋值运算符。这些运算符使我们能够更简洁地进行数学运算并赋值给同一变量。例如,加法赋值运算符 `+=` 可以用于增加变量的值,如 `...

    03-python-数组属性方法总结-数组与字符串的转换-生成数组的函数-矩阵

    在本篇Python学习笔记中,我们将深入探讨四个关键主题:数组的属性和方法、数组与字符串之间的转换、生成数组的函数以及矩阵的概念与操作。 首先,让我们来看看【数组属性方法总结】。在Python中,最常用的数组库是...

    用Python做的数学四则运算_算术口算练习程序(后添加减乘除)

    在本文中,我们将深入探讨如何使用Python编程语言创建一个简单的数学四则运算(加、减、乘、除)口算练习程序。这个程序是专为孩子们设计的,旨在帮助他们提高算术技能。通过随机生成两个1到100之间的数字和一个...

    六年级上册Python的四则运算.doc

    在六年级上册的Python课程中,学生们将学习到如何使用Python进行基本的四则运算。这门课程旨在让学生了解Python编程语言的数学运算功能,掌握其数据类型和变量的运用,同时激发他们对计算机科学的兴趣,培养严谨的...

    python 写的建议四则运算计算器.zip

    这个"python 写的建议四则运算计算器"项目,很可能是为了教学目的设计的一个简单程序,它允许用户进行基本的加、减、乘、除四则运算。通过这个项目,我们可以深入学习Python的基础知识,包括变量、数据类型、运算符...

    四则运算四则运算四则运算

    总的来说,四则运算是数学和计算机科学的基础,它们无处不在,从简单的算术到复杂的算法设计,都是通过四则运算的组合和变形来实现的。理解和熟练掌握四则运算对于学习和使用计算机科学至关重要。无论是在编写简单的...

    实现带()的四则运算

    在编程领域,实现带括号的四则运算是一项常见的任务,尤其在解析表达式或构建计算器功能时。这个任务涉及到字符串处理、语法分析以及数学计算等多个方面。下面将详细讲解如何实现这样的功能。 首先,我们需要理解四...

    sizeyunsuan.rar_加减乘除 四则运算_四则运算

    在编程中,无论是在C、Java、Python还是其他语言中,加法运算符都是用来连接或合并字符串,以及对数字进行加法运算。例如,`int a = 5; int b = 3; int sum = a + b;` 这段代码将计算出5和3的和,赋值给变量`sum`。 ...

    python中的decimal类型转换实例详解

    为了应对这类挑战,Python提供了`decimal`模块,它实现了定点和浮点算术运算符,采用的是大多数人熟悉的十进制模型,而非计算机硬件实现的IEEE浮点数运算模型。本文将详细介绍`decimal`模块中的类型转换功能,并通过...

    python数值运算 四则运算

    总的来说,Python中的数值运算十分直观和强大,无论是简单的`eval()`调用,还是手动处理输入的各个部分,都可以轻松实现四则运算。了解这些基本技巧对于任何Python开发者来说都是必要的,特别是在处理用户输入或动态...

    C和Python实现运算表达式的求值

    总结来说,本项目通过C语言和Python展示了如何利用栈数据结构实现四则运算表达式的求值。C语言实现更注重底层细节和效率,而Python实现则更加简洁和灵活。这两种方法都可以帮助我们理解表达式求值的基本逻辑,同时也...

    四则运算算法.rar

    四则运算算法是计算机科学和编程领域中的基础知识,它涵盖了加法、减法、乘法和除法等基本数学操作。在本项目中,我们关注的是一个名为"四则运算算法1.0版"的实现,它具有小数点识别、正负号识别以及运算式错误提示...

    大数的运算(除四则运算外还可进行求模等其它运算)

    在计算机科学领域,大数(Big Number)是指那些超过...综上所述,大数运算不仅包括基本的四则运算,还涉及到多种高级运算,如求模、比较和转换。理解和掌握大数运算对于深入理解计算机科学中的计算原理和算法至关重要。

    运用栈实现四则运算2

    在本主题“运用栈实现四则运算2”中,我们将深入探讨如何使用顺序栈来解决数学表达式的计算问题。顺序栈是栈的一种实现方式,其中元素存储在连续的内存空间中,便于快速访问。 首先,我们来看看四个关键的栈操作: ...

    Python笔记(二)【字典+元组+集合+字符串】.pdf

    这份Python学习笔记(二)主要涉及Python中的字典、元组、集合和字符串四种基本数据结构。这些内容对于拥有C和Java编程语言基础的学习者来说,在已有知识基础上进一步拓展Python的数据处理能力尤为重要。 首先来...

    md5算法.可以对文件和字符串计算md5值

    `MD5_Final`则将最终状态转换为16字节的摘要,并可能将其转换为16进制字符串输出。 4. **主程序(Main.cpp)**:这是测试和使用MD5实现的地方。你可以创建一个MD5_CTX对象,调用`MD5_Init`开始计算,然后用`MD5_...

    python从入门到实践第二章思维导图

    本文将对Python编程语言的初学者提供一份详细的入门知识点总结,主要从Python变量和简单数据类型的使用场合、变量命名规则、字符串操作、空白字符处理、数据类型、四则运算和注释编写等方面进行阐述。 一、变量和...

    Python简明教程.pdf

    通过将数据赋值给变量,可以进行数据的操纵与处理,如数学运算、字符串拼接等。例如,`x = 5`将整数5赋值给变量`x`;`y = 'Hello World'`将字符串'Hello World'赋值给变量`y`。 四、总结 本章节详细介绍了Python的...

Global site tag (gtag.js) - Google Analytics