茫茫狐 发表于 2021-12-28 10:04

求个算法的思路

本帖最后由 茫茫狐 于 2021-12-28 10:07 编辑

算数表达式(python系)求助个思路:
输入"任意"算数表达式字符串
例如2+3.1*4-8.2/2,输出计算结果为10.3
但他不能用eval等现成函数完成,还要考虑实现加减乘除

jamesAbc 发表于 2021-12-28 10:10

用栈去实现,分别开一个符号栈和数字栈,用栈模拟先乘除后加减的顺序即可

zjgt 发表于 2021-12-28 10:14

可以看看波兰表达式和逆波兰表达式

smilencetion 发表于 2021-12-28 10:16

【python】利用栈实现四则运算表达式求值
https://blog.csdn.net/weixin_49298240/article/details/109720319

Prozacs 发表于 2021-12-28 10:19

第一步:定义两个变长数组a[]、b[],a[]用来存放输入字符串中的数字,b[]用来存放字符串中的运算符

第二步:遍历b[],当b=='*'、'/'、'%'其中之一时,a=a(*或/或%)a,然后将b从数组b中移除,a从a中移除

第三步:此时b[]中只有‘+’、‘-’两种运算符,依次计算即可

例如字符串s="'12-3.6*2+8.4/4+2'"

此时数组a=

数组b=['-','*','+','/','+']

第一次遍历,当 i=1时,b='*',故a=a*a=3.6*2=7.2,b.remove(b),a.remove(a)

此时a=,b=['-','+','/','+']

第二次遍历,当i=2时,b='/',故a=a/a=8.4/4=2.1,b.remove(b),a.remove(a)

此时a=,b=['-','+','+']

接下来因为只剩下加减操作,不存在优先级高低问题,依次执行即可

as36601987 发表于 2021-12-28 10:41

字符串表达式解决。

y761110576 发表于 2021-12-28 10:51

不太懂python,但js里eval("2+3.1*4-8.2/2")可以直接出结果
那么让python执行js语句,是不是就可以了(菜鸟的想法{:301_1009:})
下面是百度的方法:
import execjs
result=execjs.eval("2+3.1*4-8.2/2")

逗号Mmm 发表于 2021-12-28 10:57

学习学习,帮顶!!{:301_998:}

JuncoJet 发表于 2021-12-28 10:59

自己写一个解释器呗,Python的话能用eval偷懒还不用,不如学C

liushuaipeng 发表于 2021-12-28 11:13

感谢撒币
页: [1] 2
查看完整版本: 求个算法的思路