calc.htm 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <HTML>
  2. <HEAD><TITLE>Python Script sample: Calculator</TITLE></HEAD>
  3. <BODY><FONT FACE=ARIAL SIZE=3> <!-- global default -->
  4. <SCRIPT LANGUAGE="Python">
  5. # globals
  6. Accum = 0.0 # Previous number (operand) awaiting operation
  7. FlagNewNum = 1 # Flag to indicate a new number (operand) is being entered
  8. NullOp = lambda x,y: y
  9. PendingOp = NullOp# Pending operation waiting for completion of second operand
  10. numberButNames = ['Zero','One','Two','Three','Four','Five','Six','Seven','Eight','Nine']
  11. def NumPressed(Num):
  12. print "NumPressed", Num
  13. global FlagNewNum
  14. if FlagNewNum:
  15. ax.document.Keypad.ReadOut.Value = Num
  16. FlagNewNum = None
  17. else:
  18. if ax.document.Keypad.ReadOut.Value == "0":
  19. ax.document.Keypad.ReadOut.Value = str(Num)
  20. else:
  21. ax.document.Keypad.ReadOut.Value= ax.document.Keypad.ReadOut.Value + str(Num)
  22. # Dynamically create handlers for all the decimal buttons.
  23. # (ie, this will dynamically create "One_OnClick()"... etc handlers
  24. for i in range(len(numberButNames)):
  25. exec "def %s_OnClick():\tNumPressed(%d)\n" % (numberButNames[i],i)
  26. def Decimal_OnClick():
  27. global curReadOut, FlagNewNum
  28. curReadOut = ax.document.Keypad.ReadOut.Value
  29. if FlagNewNum:
  30. curReadOut = "0."
  31. FlagNewNum = None
  32. else:
  33. if not ("." in curReadOut):
  34. curReadOut = curReadOut + "."
  35. ax.document.Keypad.ReadOut.Value = curReadOut
  36. import sys, string
  37. def Operation(Op, fn):
  38. global FlagNewNum, PendingOp, Accum
  39. ReadOut = ax.document.Keypad.ReadOut.Value
  40. print "Operation", Op, ReadOut, PendingOp, Accum
  41. if FlagNewNum:
  42. # User is hitting op keys repeatedly, so don't do anything
  43. PendingOp = NullOp
  44. else:
  45. FlagNewNum = 1
  46. Accum = PendingOp( Accum, string.atof(ReadOut) )
  47. ax.document.Keypad.ReadOut.Value = str(Accum)
  48. PendingOp = fn
  49. def ClearEntry_OnClick():
  50. # Remove current number and reset state
  51. global FlagNewNum
  52. ax.document.Keypad.ReadOut.Value = "0"
  53. FlagNewNum = 1
  54. def Clear_OnClick():
  55. global Accum, PendingOp
  56. Accum = 0
  57. PendingOp = NullOp
  58. ClearEntry_OnClick()
  59. def Neg_OnClick():
  60. ax.document.Keypad.ReadOut.Value = str(-string.atof(ax.document.Keypad.ReadOut.Value))
  61. </SCRIPT>
  62. <form action="" Name="Keypad">
  63. <TABLE>
  64. <B>
  65. <TABLE BORDER=2 WIDTH=50 HEIGHT=60 CELLPADDING=1 CELLSPACING=5>
  66. <CAPTION ALIGN=top> <b>Calculator</b><p> </CAPTION>
  67. <TR>
  68. <TD COLSPAN=3 ALIGN=MIDDLE><INPUT NAME="ReadOut" TYPE="Text" SIZE=24 VALUE="0" WIDTH=100%></TD>
  69. <TD></TD>
  70. <TD><INPUT NAME="Clear" TYPE="Button" VALUE=" C " ></TD>
  71. <TD><INPUT NAME="ClearEntry" TYPE="Button" VALUE=" CE " ></TD>
  72. </TR>
  73. <TR>
  74. <TD><INPUT NAME="Seven" TYPE="Button" VALUE=" 7 " ></TD>
  75. <TD><INPUT NAME="Eight" TYPE="Button" VALUE=" 8 " ></TD>
  76. <TD><INPUT NAME="Nine" TYPE="Button" VALUE=" 9 " ></TD>
  77. <TD></TD>
  78. <TD><INPUT NAME="Neg" TYPE="Button" VALUE=" +/- " ></TD>
  79. <TD><INPUT NAME="Percent" TYPE="Button" VALUE=" % " OnClick="Operation('%', lambda x,y: x*y/100.0)"></TD>
  80. </TR>
  81. <TR>
  82. <TD><INPUT NAME="Four" TYPE="Button" VALUE=" 4 " ></TD>
  83. <TD><INPUT NAME="Five" TYPE="Button" VALUE=" 5 " ></TD>
  84. <TD><INPUT NAME="Six" TYPE="Button" VALUE=" 6 " ></TD>
  85. <TD></TD>
  86. <TD ALIGN=MIDDLE><INPUT NAME="Plus" TYPE="Button" VALUE=" + " OnClick="Operation('+', lambda x,y: x+y)"></TD>
  87. <TD ALIGN=MIDDLE><INPUT NAME="Minus" TYPE="Button" VALUE=" - " OnClick="Operation('-', lambda x,y: x-y)"></TD>
  88. </TR>
  89. <TR>
  90. <TD><INPUT NAME="One" TYPE="Button" VALUE=" 1 " ></TD>
  91. <TD><INPUT NAME="Two" TYPE="Button" VALUE=" 2 " ></TD>
  92. <TD><INPUT NAME="Three" TYPE="Button" VALUE=" 3 " ></TD>
  93. <TD></TD>
  94. <TD ALIGN=MIDDLE><INPUT NAME="Multiply" TYPE="Button" VALUE=" * " OnClick="Operation('*', lambda x,y: x*y)" ></TD>
  95. <TD ALIGN=MIDDLE><INPUT NAME="Divide" TYPE="Button" VALUE=" / " OnClick="Operation('/', lambda x,y: x/y)" ></TD>
  96. </TR>
  97. <TR>
  98. <TD><INPUT NAME="Zero" TYPE="Button" VALUE=" 0 " ></TD>
  99. <TD><INPUT NAME="Decimal" TYPE="Button" VALUE=" . " ></TD>
  100. <TD COLSPAN=3></TD>
  101. <TD><INPUT NAME="Equals" TYPE="Button" VALUE=" = " OnClick="Operation('=', lambda x,y: x)"></TD>
  102. </TR></TABLE></TABLE></B>
  103. </FORM>
  104. </FONT></BODY></HTML>