from Tkinter import * from tkMessageBox import showinfo #Verwendet Module,Tkinter zur Erstellung vom Taschenrechner,showinfo Fehler abzufangen #---------------------------------- #Erstellung eines Taschenrechners def UPN(): root.title('umgekehrte polnische Notation') root.geometry('310x440+200+100')#Die Groesse UI = LabelFrame(root) UI.place(x = 1,y = 1,width = 308,height = 124) UPN.text = Text(UI)#Das Fenster zur Ausgabe UPN.text.place(x=1,y=1,width=300,height=116) Li=[['7','8','9','+','DEL'], ['4','5','6','-','Enter'], ['1','2','3','*','='], ['0','/','Clear','','']] #Erstellung der Tasten mit Hilfe von Schleife for i in range(len(Li[0])): for j in range(len(Li)): bts = Li[j][i] if bts: bt = Button(root) bt.place(x=i*60+10,y=120+(j+1)*60,width=50,height=50) bt['text'] = bts bt.bind('',response,add=(root,)) #---------------------------------- def response(event): I = event.widget['text']#Die Zeichnen auf der gedrueckten Taste zu bekommen texts = UPN.text.get(1.0,END+'-1c')#Die Inhalte vom Text zu bekommen #print texts if I == 'DEL': UPN.text.delete(INSERT + '-1c',INSERT) elif I == 'Clear': UPN.text.delete(1.0,END) elif I == 'Enter': UPN.text.insert(INSERT,'\n') elif I == '=': try: s = toList(texts) #print s UPN.text.insert(END,'\n=\n') UPN.text.insert(END,Stack(s))#Das Ergebnis abzugebn UPN.text.see('end') except: showinfo('Achtung:', 'Falsche Eingabe,bitte ueberpruefen Sie die Eingabe!') else: UPN.text.insert(INSERT,I) UPN.text.focus()#Cursor auf der Taste #---------------------------------- def toList(text): #Die mit Zeilenvorschubzeichen Zeichenkette zu List umwandeln a = text.splitlines() L = [] for i in a: s = "" z = True for j in i: #print if j not in '+-*/': s += j z = True else: if s: L.append(s) if j: L.append(j) s = "" z = False if i[-1] in '+-*/': if z and j: L.append(j) else: if z and s: L.append(s) return L def Stack(s,S = None,i = 0): #Definition von Stack if not S: S = [] if i == len(s): return S[0] a = s[i]#Das Element wird nacheinander ausgenommen if a.isdigit():#Ob es nur aus Zahlen besteht S.append(a) return Stack(s, S, i+1) else: c = S.pop() d = S.pop() S.append(Grundrechenarten(d,a,c))#rechnen und einfuellen return Stack(s, S, i+1) def Grundrechenarten(c,a,d): if a == '+': result = float(c)+float(d) elif a == '-': result = float(c)-float(d) elif a == '*': result = float(c)*float(d) elif a == '/': result = float(c)/float(d) if result == int(result): result = int(result) return result #---------------------------------- def main(): UPN() root.mainloop() #main-Funktion if __name__ == '__main__': print 'Dieses Programm ist ein Taschenrechner mit UPN-Eingabe.Es verwendet man zur Rechnung der Grundechenarten.' print 'Programmierer: Zhu,Hongrui' print ' Hu,Fangyu' print ' Chen,Siyi' root = Tk() main()