Skip to content
Snippets Groups Projects
Commit c84e94b5 authored by Martin Roberto Castillo Hund's avatar Martin Roberto Castillo Hund
Browse files

fast armens app version, angefangen mit tests

parents
No related branches found
No related tags found
No related merge requests found
app.py 0 → 100755
#!/usr/bin/env python3
from tkinter import *
class Rechner:
def __init__(self):
self.zahlen = []
self.operatoren = []
self.lastchar = ''
def show_status(self):
print("zahlen:", self.zahlen)
print("operatoren:", self.operatoren)
print("letztes zeichen:", self.lastchar)
def add_character(self, char):
# input: 42
# 1. 4 -> [4]
# 2. 2 -> [] -> [42]
ziffern = ("0","1","2","3","4","5","6","7","8","9")
# Das aktuelle Zeichen ist eine Ziffer.
if char in ziffern :
charint = int(char)
if self.lastchar in ziffern:
oldint = self.zahlen.pop()
self.zahlen.append(oldint*10 + charint)
else:
self.zahlen.append(charint)
self.lastchar=char
self.show_status()
return
# wir lesen einen operator ein.
operatoren = tuple("+-*/")
if char in operatoren:
# bevor wir diesen operator hinzufügen: überprüfe, ob
# nicht gerade zuvor schon ein operator hinzugefügt wurde.
# falls ja, entferne den vorherigen operator
if self.lastchar in operatoren:
self.operatoren.pop()
# wurde überhaupt schon eine Zahl eingegeben?
if not self.zahlen: # die liste ist wohl leer.
self.show_status()
return
self.operatoren.append(char)
self.lastchar=char
self.show_status()
return
def calculate(self):
zahlen = self.zahlen
operatoren = self.operatoren
op = operatoren.pop()
rechteZahl = zahlen.pop()
linkeZahl = zahlen.pop()
if op == "+":
ergebnis = linkeZahl + rechteZahl
zahlen.append(ergebnis)
elif op == "-":
zahlen.append(linkeZahl - rechteZahl)
elif op == "*":
zahlen.append(linkeZahl * rechteZahl)
elif op == "/":
#XXX durch 0?
zahlen.append(linkeZahl / rechteZahl)
else:
print("Unerwarteter Operator in Rechner.calculate():", op)
class App:
def __init__(self, master):
self.buffer = ""
self.rechner = Rechner()
tasten=("7","8","9","+","4","5","6","-",
"1","2","3","*",".","0","=","/")
for i,t in enumerate(tasten):
# zugehörige zeile bestimmen
row=i//4 + 1
# zugehörige spalte bestimmen
col=i%4
Button(master, text=t,
command=self.button_cmd(t)).grid(row=row,
column=col,
sticky=N+S+E+W)
Button(master, text="cl", command=self.clear).grid(
row=0, column=0, sticky=N+S+E+W)
self.anzeige = Label(master, text="0")
self.anzeige.grid(row=0,column=1,columnspan=3)
for i in range(0,4):
Grid.columnconfigure(master,i,weight=1)
for i in range(0,5):
Grid.rowconfigure(master,i,weight=1)
master.geometry("250x150+700+250")
def button_cmd(self, t):
"""
gibt eine funktion zurück, welche eine Button ausführen
kann. Es wird der Text t in self.buffer gespeichert.
"""
def save():
self.buffer=self.buffer+t
self.anzeige.config(text=self.buffer)
self.rechner.add_character(t)
return save
def clear(self):
self.buffer=""
self.anzeige.config(text="")
self.rechner = Rechner()
if __name__ == '__main__':
root = Tk()
app= App(root)
root.mainloop()
#root.destroy()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment