Advertisement
Guest User

Untitled

a guest
Apr 18th, 2014
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. import math
  2.  
  3. def getValue(function, x):
  4. function = "val = " + function
  5. #compile(function, '', 'exec')
  6. exec(function)
  7. print(val)
  8.  
  9. function = input("Enter a function f(x):n")
  10. getValue(function, 10)
  11.  
  12. >>> eval('math.sin(1)**2')
  13. 0.7080734182735712
  14.  
  15. >>> val
  16. Traceback (most recent call last):
  17. File "<stdin>", line 1, in <module>
  18. NameError: name 'val' is not defined
  19. >>> exec('val=math.sin(1)**2')
  20. >>> val
  21. 0.7080734182735712
  22.  
  23. def getValue(function, x):
  24. function = "{}({})".format(function, x)
  25. print(function)
  26. val=eval(function)
  27. print(val)
  28.  
  29. import sys
  30. import operator
  31. from pyparsing import nums, oneOf, Word, Literal, Suppress
  32. from pyparsing import ParseException, Forward, Group
  33.  
  34. op_map = { '*' : operator.mul,
  35. '+' : operator.add,
  36. '/' : operator.div,
  37. '-' : operator.sub}
  38.  
  39. exp = Forward()
  40.  
  41. number = Word(nums).setParseAction(lambda s, l, t: int(t[0]))
  42. lparen = Literal('(').suppress()
  43. rparen = Literal(')').suppress()
  44. op = oneOf('+ - * /').setResultsName('op').setParseAction(lambda s, l, t: op_map[t[0]])
  45.  
  46. exp << Group(lparen + op + (number | exp) + (number | exp) + rparen)
  47.  
  48. def processArg(arg):
  49. if isinstance(arg, int):
  50. return arg
  51. else:
  52. return processList(arg)
  53.  
  54. def processList(lst):
  55. args = [processArg(x) for x in lst[1:]]
  56. return lst.op(args[0], args[1])
  57.  
  58.  
  59. def handleLine(line):
  60. result = exp.parseString(line)
  61. return processList(result[0])
  62.  
  63. while True:
  64. try:
  65. print handleLine(raw_input('> '))
  66. except ParseException, e:
  67. print >>sys.stderr,
  68. "Syntax error at position %d: %s" % (e.col, e.line)
  69. except ZeroDivisionError:
  70. print >>sys.stderr,
  71. "Division by zero error"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement