Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # Calculette v1.0 by Yarflam
- def calc(exp):
- r=''
- i=0
- while i < len(exp):
- if exp[i]=='P' and exp[(i+1)]=='I':
- r="3.1415926535897932384626433832795"
- if exp[i] in '0123456789.':
- r=r+exp[i]
- if exp[i]=='+':
- r=str(float(r)+calc(exp[(i+1):len(exp)]))
- break
- if exp[i]=='-':
- r=str(float(r)-calc(exp[(i+1):len(exp)]))
- break
- if exp[i]=='*':
- endx=exp.find('+',i) if (not exp.find('+',i) == -1) else len(exp)
- endx=exp.find('-',i) if (not exp.find('-',i) == -1) and (exp.find('-',i) < endx) else endx
- endx=calc_prio(exp) if (exp[(i+1)] == '(') else endx
- i=i+1 if (exp[(i+1)] == '(') else i
- r=str(float(r)*calc(exp[(i+1):endx]))
- i=(endx-1)
- if exp[i]=='/':
- endx=exp.find('+',i) if (not exp.find('+',i) == -1) else len(exp)
- endx=exp.find('-',i) if (not exp.find('-',i) == -1) and (exp.find('-',i) < endx) else endx
- endx=calc_prio(exp) if (exp[(i+1)] == '(') else endx
- i=i+1 if (exp[(i+1)] == '(') else i
- r=str(float(r)/calc(exp[(i+1):endx]))
- i=(endx-1)
- if exp[i]=='(':
- r=str(calc(exp[(i+1):calc_prio(exp)]))
- exp=exp[calc_prio(exp)+1:len(exp)]
- i=-1
- i=i+1
- return float(r)
- def calc_prio(exp):
- cmpp=exp.count('(',0)
- l=-1
- mx=-1
- i=0
- while i < len(exp) and (l >= 0 or mx < 0):
- l=l+1 if exp[i]=='(' else l
- l=l-1 if exp[i]==')' else l
- mx=l if l > mx else mx
- i=i+1
- return (i-1)
- c=raw_input('CALC: ')
- print "= ",calc(c)
- raw_input()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement