python - 我可以将运算符 +,-,/,* 分配给 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
谢谢!
解决方案
推荐阅读
- wso2 - 如何修复“TypeError:无法获取”(Chrome)/“尝试获取资源时出现网络错误。” WSO2-AM 中的 (FireFox)
- android - 在使用 XMLPullParser 解析时(之后)过滤文本
- owasp - ZAP cli 报告不同的结果
- c# - 用于 Asp.Net Core 的 Kendo UI 的数据库驱动图像浏览器
- emacs - 在 Spacemacs 中使用键绑定生成降价表
- typescript - AWS-Cognito:创建用户池后是否可以编辑用户池名称?
- ios - GMSAutocompleteViewController 不返回结果
- php - 更改区域设置时更改路由组前缀
- swift - 如何从超级视图中删除以编程方式创建的 UIView
- c# - 通过 Wiql (WorkItem) 查询给出错误请求状态