首页 > 解决方案 > 我可以将运算符 +,-,/,* 分配给 python 中的字符串吗?

问题描述

我目前正在用python构建一个计算器。我的程序运行良好,但我想知道是否可以通过执行以下操作来缩短它:

车削:

for i in range(len(NS2)-1):
        if OP2[i]=="+": A+=NS2[i+1]
        if OP2[i]=="-": A-=NS2[i+1]
        if OP2[i]=="/": A/=NS2[i+1]
        if OP2[i]=="*": A*=NS2[i+1]

进入:

Dict = {"+":+,"-":-,"*":*,"/",/}
for i in range(len(NS2)-1):
            A Dict[OP2[i]]=NS2[i+1]

或等效的东西,这样我就不必为此使用八行。

PS:我无法使用eval().

完整代码如下:

import re
def calcul(S):
    S=S.replace(' ','')
    OP1=[];Tempo=[]
    def operations(S):
        NS2=[];OP2=[]
        if "+" in S or "-" in S: [OP2.append(i)  if i=="+" or i=="-" else NS2.append(int(i)) for i in S]
        else: [OP2.append(i)  if i=="*" or i=="/" else NS2.append(int(i)) for i in S]
        A=NS2[0]
        if len(NS2)==0: return A
        for i in range(len(NS2)-1):
            if OP2[i]=="+": A+=NS2[i+1]
            if OP2[i]=="-": A-=NS2[i+1]
            if OP2[i]=="/": A/=NS2[i+1]
            if OP2[i]=="*": A*=NS2[i+1]
        return A
    if '(' in S and ')' in S:
        [OP1.append(i) for i in S if i=="*" or i=="/"]
        NS1=re.split('[( )]',S.replace('*'," ").replace('/',' '))
    else:
        [OP1.append(i) for i in S if i=="+" or i=="-"]
        NS1=re.split('[( )]',S.replace('+'," ").replace('-',' '))
    [Tempo.append(operations(i)) for i in NS1 if i!=""]
    Result=Tempo[0]
    for i in range(len(Tempo)-1):
        if OP1[i]=="/": Result/=Tempo[i+1]
        if OP1[i]=="*": Result*=Tempo[i+1]
        if OP1[i]=="+": Result+=Tempo[i+1]
        if OP1[i]=="-": Result-=Tempo[i+1]
    return Result

谢谢!

标签: pythonpython-3.xstringmathoperators

解决方案


推荐阅读