鱼C论坛

 找回密码
 立即注册
楼主: ~风介~

[技术交流] #鱼C五周年狂欢预热#第三弹(已结束)

  [复制链接]
发表于 2015-1-19 20:51:42 | 显示全部楼层
顶一个~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-19 22:01:32 | 显示全部楼层

我是前面变量名都是一个字母的那位, 好吧其实是我用错号了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-19 22:08:30 | 显示全部楼层
Pythoner-George 发表于 2015-1-19 22:01
我是前面变量名都是一个字母的那位, 好吧其实是我用错号了

原谅我低智商....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-19 22:42:47 | 显示全部楼层

回帖奖励 +3 鱼币

支持楼主!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 08:48:47 | 显示全部楼层
捧场把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 11:49:05 | 显示全部楼层
本帖最后由 挥舞乾坤 于 2015-1-20 19:16 编辑

实在短不下去了
  1. import re;s,oper,result = input('输入表达式:').replace(' ',''),{'+':2,'-':2,'*':1,'/':1,'#':3,'(':4,')':4},[]
  2. operlist,slist, = ['#'],re.findall(r'\w+[.]?\w*|^\-\w+[.]?\w*|(?<=[\-\+\*\/\(])\-\w+[.]?\w*|[\-\+\*\/\(\)]',s)
  3. for each in slist:
  4.     if each not in oper:result.append(each)
  5.     else:
  6.         if each == '(':operlist.append(each)
  7.         elif each == ')':
  8.             while operlist[-1] != '(':result.append(operlist.pop())
  9.             operlist.pop()
  10.         else:
  11.             while oper[operlist[-1]] <= oper[each]:result.append(operlist.pop())
  12.             operlist.append(each)
  13. while len(operlist) > 1:result.append(operlist.pop())
  14. print(' '.join([str(x) for x in result]))
复制代码

测试数据:
数字:
-5+((1+2)*4)-35+((-1 - -2)*-4)-3
5+((-1 + (-2))*(-4))-3
5+((-1+2)*4)-3
5.3 + ((-2.4 + 3) / 5) -3.0
5 + (( 1 + 2 ) * 4) - 3
512+((112+212)*2-312)
51   2 +((1    12+2 1 2)*2-3 1 2)
字母:
a+b ---> a,b,+
a+(b-c) ---> a,b,c,-,+
a+(b-c)*d ---> a,b,c,-,d,*,+
a+d*(b-c)--->a,d,b,c,-,*,+

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
我是桃川人 + 1 + 1 第一名了!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-20 12:18:34 | 显示全部楼层
戴宇轩 发表于 2015-1-18 23:56
经过严格的测试, 现在没有BUG了, Python 2 & 3 通用

亲,代码不错哦!给几个测试的例子哦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 14:18:51 | 显示全部楼层
本帖最后由 ~风介~ 于 2015-1-22 23:11 编辑

python2.6版本,代码太长,转不成代码格式,参与下吧,还得继续优化。
  1. def ReversePolishNotation(middlepression):
  2.     operatorlist=['#']
  3.     polishexpression=list()
  4.     prioritydict={"+":1,"-":1,"*":2,"/":2}
  5.     for s in middlepression:
  6.         if s.isalnum():
  7.             polishexpression.append(s)
  8.         elif s=='(':
  9.             operatorlist.append(s)
  10.         elif s==')':
  11.             while 1:
  12.                 polishexpression.append(operatorlist.pop())
  13.                 if operatorlist[-1]=='(':
  14.                     operatorlist.pop()
  15.                     break        
  16.         else:
  17.             while prioritydict.get(operatorlist[-1])>=prioritydict.get(s):
  18.                 if prioritydict.get(operatorlist[-1])<prioritydict.get(s):
  19.                     operatorlist.append(s)
  20.                     break
  21.                 polishexpression.append(operatorlist.pop())
  22.             if prioritydict.get(operatorlist[-1])<prioritydict.get(s):
  23.                     operatorlist.append(s)   
  24.     for  op in operatorlist:
  25.         polishexpression.append(operatorlist.pop())                             
  26.     return ','.join(polishexpression)

  27. if __name__ == '__main__':
  28.     hlw = '1+(2*7+2)/2'
  29.     print hlw
  30.     print ReversePolishNotation(hlw)
复制代码



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 15:19:25 | 显示全部楼层

回帖奖励 +3 鱼币

捧场支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 16:22:32 | 显示全部楼层
挥舞乾坤 发表于 2015-1-20 11:49
实在短不下去了

测试数据:

哈哈,找到问题了,测试下减一个负数~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 18:13:10 | 显示全部楼层
本帖最后由 戴宇轩 于 2015-1-20 18:20 编辑
~风介~ 发表于 2015-1-20 12:18
亲,代码不错哦!给几个测试的例子哦~

-(1+(-3)*(872.33-22/983.222)-(0.32+(-987)*9)+3.1415926)   ------>   1, -3, 872.33, 22, 983.222, /, -, *, 0.32, -987, 9, *, +, 3.1415926, +, -, +, -

Testing...-(test+python)*(list+i/love*(fishc-fishc.com))   ------>   Testing..., test, python, +, list, i, love, fishc, fishc.com, -, *, /, +, *, -

a-b+(c*d)   ------>   a, b, c, d, *, +, -

a*b/(c+d)   ------>   a, b, c, d, +, /, *

a+b-c*d+(e-f/g)-(h+(i/j-k)*l+m)*n   ------>   a, b, c, d, *, e, f, g, /, -, h, i, j, /, k, -, l, *, m, +, +, n, *, -, +, -, +

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 19:07:59 | 显示全部楼层
我是桃川人 发表于 2015-1-20 16:22
哈哈,找到问题了,测试下减一个负数~

谢谢测试,负数不加括号的话,确实有问题,以改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 23:24:05 | 显示全部楼层
顶楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 23:26:54 | 显示全部楼层

回帖奖励 +3 鱼币

只能表示支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-20 23:48:01 | 显示全部楼层
戴宇轩 发表于 2015-1-18 23:56
经过严格的测试, 现在没有BUG了, Python 2 & 3 通用

最后一次改进是因为有些人习惯写负数(或带正号的正 ...

a+b-c*d+(e-f/g)-(h+(i/j-k)*l+m)*n   ------>   a b + c d * - e f g / - + h i j / k - l * + m + n * -

评分

参与人数 1鱼币 +30 收起 理由
wei_Y + 30

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-21 06:29:36 | 显示全部楼层

回帖奖励 +3 鱼币

路过 路过 加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-21 09:36:23 | 显示全部楼层
wei_Y 发表于 2015-1-14 15:15
前排兜售面包,瓜子,矿泉水。

这里估计售不出去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-21 09:38:03 | 显示全部楼层
我写不出来,只能再学习:dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-21 16:22:36 | 显示全部楼层
Xiao_肚oO 发表于 2015-1-20 23:48
a+b-c*d+(e-f/g)-(h+(i/j-k)*l+m)*n   ------>   a b + c d * - e f g / - + h i j / k - l * + m + n *  ...

怎么了&#191;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-21 18:54:02 | 显示全部楼层

回帖奖励 +3 鱼币

我是来看看大神们是怎么编的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 03:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表