我是靠谱客的博主 无限百褶裙,最近开发中收集的这篇文章主要介绍Python四则运算(加减乘除,非eval函数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

0ca7692529fb4110ade39817dac66073.jpg

Author :君安(Junan)     Create On:2022年6月11日

本文章仅仅针对于加减乘除(四则运算),其他可自行更改


  • 前言
  • 代码实现
  • 实现原理
  • 参数说明

前言:

    本文章为原创文章,不存在搬运行为。为什么要做这个?eval不好吗?eval当然好,但是,他有限制性,如果你要别的效果,eval显然不行。所以,作者做了一个仿eval的函数。取名为evaled。

代码实现:

  下面我们来看看代码

def evaled(exp):
def sub(exp):
try:
list=[]
i=0
while i<len(exp):
n=''
if exp[i] in '0123456789.':
while exp[i] in '0123456789.':
n+=exp[i]
i+=1
else:
n=exp[i]
i+=1
list.append(n)
return list
except:
list.append(n)
return list
exp=sub(exp)
string=[]
while '(' in exp:
for i in range(len(exp)):
try:
if exp[i]=='(':
start=i
string=[]
elif exp[i]==')':
s=[]
for j in range(len(exp)):
if j<start or j>i:
s.append(exp[j])
else:
if j==start:
s.append(str(evaled(string)))
exp=s
else:
string.append(exp[i])
except:
break
for i in range(len(exp)):
try:
if exp[i]=='-':
if i>0:
try:
exp[i-1]=str(float(exp[i-1]))
except:
exp[i]=None
exp[i+1]='-'+exp[i+1]
else:
exp[i]=None
exp[i+1]='-'+exp[i+1]
if exp[i]=='+':
if i>0:
try:
exp[i-1]=str(float(exp[i-1]))
except:
exp[i]=None
else:
exp[i]=None
except:
continue
while None in exp:
exp.remove(None)
new=[]
for i in range(len(exp)):
if exp[i]=='*' and exp[i-2]!='*' and exp[i-2]!='/' and exp[i-2]!='%':
new.append('f'+exp[i-1]+'~'+exp[i+1]+'*')
elif exp[i]=='/' and exp[i-2]!='*' and exp[i-2]!='/' and exp[i-2]!='%':
new.append('f'+exp[i-1]+'~'+exp[i+1]+'/')
elif exp[i]=='%' and exp[i-2]!='*' and exp[i-2]!='/' and exp[i-2]!='%':
new.append('f'+exp[i-1]+'~'+exp[i+1]+'%')
else:
try:
if exp[i-1]!='*' and exp[i-1]!='/' and exp[i+1]!='*' and exp[i+1]!='/'and exp[i-1]!='%' and exp[i+1]!='%':
new.append(exp[i])
if exp[i]=='*' and (exp[i-2]=='*' or exp[i-2]=='/' or exp[i-2]=='%'):
new.append(exp[i+1])
elif exp[i]=='/' and (exp[i-2]=='*' or exp[i-2]=='/' or exp[i-2]=='%'):
new.append(exp[i+1])
elif exp[i]=='%' and (exp[i-2]=='*' or exp[i-2]=='/' or exp[i-2]=='%'):
new.append(exp[i+1])
except:
new.append(exp[i])
res=new[0]
try:
res=float(res)
except:
res=str(res)
for i in range(0,len(new)):
try:
if new[i]=='+':
if new[i+1][0]=='f':
op=new[i+1][-1]
a=new[i+1].split('~')
a[0]=a[0][1:len(a[0]):1]
a[1]=a[1][0:-1:1]
if op=='*':
new[i+1]=float(a[0])*float(a[1])
elif op=='/':
new[i+1]=float(a[0])/float(a[1])
elif op=='%':
new[i+1]=float(a[0])%float(a[1])
res=float(res)+float(new[i+1])
elif new[i]=='-':
if new[i+1][0]=='f':
op=new[i+1][-1]
a=new[i+1].split('~')
a[0]=a[0][1:len(a[0]):1]
a[1]=a[1][0:-1:1]
if op=='*':
new[i+1]=float(a[0])*float(a[1])
elif op=='/':
new[i+1]=float(a[0])/float(a[1])
elif op=='%':
new[i+1]=float(a[0])%float(a[1])
res=res-float(new[i+1])
elif new[i]=='*' and len(new[i])==1:
res=res*float(new[i+1])
elif new[i]=='/' and len(new[i])==1:
res=res/float(new[i+1])
elif new[i]=='%' and len(new[i])==1:
res=res%float(new[i+1])
else:
try:
op=new[i][-1]
a=new[i].split('~')
a[0]=a[0][1:len(a[0]):1]
a[1]=a[1][0:-1:1]
if op=='*':
res=float(a[0])*float(a[1])
elif op=='/':
res=float(a[0])/float(a[1])
elif op=='%':
res=float(a[0])%float(a[1])
except:
pass
except:
continue
return res

实现原理:

    检测到括号递归括号里的内容,检测一元(负)数,检测到乘法(或除法)进行改写(单个不改写)为f{num1}~{num2}*(或/),最后检测加减,并且计算改写后的乘法。

传参说明:

    参数必须为一个字符串

    例如:"-1*3"

    得到结果为:-3

最后

以上就是无限百褶裙为你收集整理的Python四则运算(加减乘除,非eval函数)的全部内容,希望文章能够帮你解决Python四则运算(加减乘除,非eval函数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部