|
发表于 2015-1-17 01:33:24
|
显示全部楼层
回帖奖励 +3 鱼币
本帖最后由 Xiao_肚oO 于 2015-1-22 11:27 编辑
- def RPN(m,r=[],o=['_'],i=0,op={'_':'0','+':'1','-':'1','*':'2','/':'2'}):
- while i<len(m): r.extend(RPN(m[m.index('(',i)+1:],[],['_'],0)) if m[i]=='(' else o.append(m[i]) if m[i] in op else r.append(m[i]+' ') if m[i]!=')' else m.clear();i+=1 if len(m)==0 else (m[i]=='(' and r.pop()+1 or 1);[op[o[len(o)-2]],op[o[len(o)-1]]]==['1','1'] and r.append(o.pop(len(o)-2)+' ') or ((op[o[len(o)-1]]=='2' and o[len(o)-1]!=m[i-1]) and r.append(o.pop()+' '))
- while op[o[len(o)-1]]=='1': r.append(o.pop()+' ')
- return ''.join(r), i
- print(''.join(RPN(list(input('Input:').replace(' ','')))[0]))
复制代码
看了一下,没有用这个方法的,先贴出来吧!没有用正则和库,只支持字母系数,例如a+d*(b-c) 。
版本是3.4.2,这个方法的最短行极限了吧,实在想不出来了。
应该另辟蹊径,再去想想别的能不能更短。
怒减七行,效率同样维系!
测试结果:
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 * -
(((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 + -
|
评分
-
查看全部评分
|