Нет описания

Ende.py 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. from Tkinter import *
  2. from tkMessageBox import showinfo
  3. #Verwendet Module,Tkinter zur Erstellung vom Taschenrechner,showinfo Fehler abzufangen
  4. #----------------------------------
  5. #Erstellung eines Taschenrechners
  6. def UPN():
  7. root.title('umgekehrte polnische Notation')
  8. root.geometry('310x440+200+100')#Die Groesse
  9. UI = LabelFrame(root)
  10. UI.place(x = 1,y = 1,width = 308,height = 124)
  11. UPN.text = Text(UI)#Das Fenster zur Ausgabe
  12. UPN.text.place(x=1,y=1,width=300,height=116)
  13. Li=[['7','8','9','+','DEL'],
  14. ['4','5','6','-','Enter'],
  15. ['1','2','3','*','='],
  16. ['0','/','Clear','','']]
  17. #Erstellung der Tasten mit Hilfe von Schleife
  18. for i in range(len(Li[0])):
  19. for j in range(len(Li)):
  20. bts = Li[j][i]
  21. if bts:
  22. bt = Button(root)
  23. bt.place(x=i*60+10,y=120+(j+1)*60,width=50,height=50)
  24. bt['text'] = bts
  25. bt.bind('<Button-1>',response,add=(root,))
  26. #----------------------------------
  27. def response(event):
  28. I = event.widget['text']#Die Zeichnen auf der gedrueckten Taste zu bekommen
  29. texts = UPN.text.get(1.0,END+'-1c')#Die Inhalte vom Text zu bekommen
  30. #print texts
  31. if I == 'DEL':
  32. UPN.text.delete(INSERT + '-1c',INSERT)
  33. elif I == 'Clear':
  34. UPN.text.delete(1.0,END)
  35. elif I == 'Enter':
  36. UPN.text.insert(INSERT,'\n')
  37. elif I == '=':
  38. try:
  39. s = toList(texts)
  40. #print s
  41. UPN.text.insert(END,'\n=\n')
  42. UPN.text.insert(END,Stack(s))#Das Ergebnis abzugebn
  43. UPN.text.see('end')
  44. except:
  45. showinfo('Achtung:', 'Falsche Eingabe,bitte ueberpruefen Sie die Eingabe!')
  46. else:
  47. UPN.text.insert(INSERT,I)
  48. UPN.text.focus()#Cursor auf der Taste
  49. #----------------------------------
  50. def toList(text):
  51. #Die mit Zeilenvorschubzeichen Zeichenkette zu List umwandeln
  52. a = text.splitlines()
  53. L = []
  54. for i in a:
  55. s = ""
  56. z = True
  57. for j in i:
  58. #print
  59. if j not in '+-*/':
  60. s += j
  61. z = True
  62. else:
  63. if s:
  64. L.append(s)
  65. if j:
  66. L.append(j)
  67. s = ""
  68. z = False
  69. if i[-1] in '+-*/':
  70. if z and j:
  71. L.append(j)
  72. else:
  73. if z and s:
  74. L.append(s)
  75. return L
  76. def Stack(s,S = None,i = 0):
  77. #Definition von Stack
  78. if not S:
  79. S = []
  80. if i == len(s):
  81. return S[0]
  82. a = s[i]#Das Element wird nacheinander ausgenommen
  83. if a.isdigit():#Ob es nur aus Zahlen besteht
  84. S.append(a)
  85. return Stack(s, S, i+1)
  86. else:
  87. c = S.pop()
  88. d = S.pop()
  89. S.append(Grundrechenarten(d,a,c))#rechnen und einfuellen
  90. return Stack(s, S, i+1)
  91. def Grundrechenarten(c,a,d):
  92. if a == '+':
  93. result = float(c)+float(d)
  94. elif a == '-':
  95. result = float(c)-float(d)
  96. elif a == '*':
  97. result = float(c)*float(d)
  98. elif a == '/':
  99. result = float(c)/float(d)
  100. if result == int(result):
  101. result = int(result)
  102. return result
  103. #----------------------------------
  104. def main():
  105. UPN()
  106. root.mainloop()
  107. #main-Funktion
  108. if __name__ == '__main__':
  109. print 'Dieses Programm ist ein Taschenrechner mit UPN-Eingabe.Es verwendet man zur Rechnung der Grundechenarten.'
  110. print 'Programmierer: Zhu,Hongrui'
  111. print ' Hu,Fangyu'
  112. print ' Chen,Siyi'
  113. root = Tk()
  114. main()