Programmacode bij De simpele rekenmachine

#Rekenmachine v.0.1
import math
import numpy
import tkinter as tk
from tkinter import filedialog
import tkinter as tk

def Eval(R):
    SYM = ["+", "-", "x", ":"]
    for sym in SYM:
        if sym in R:
            S = R.split(sym)
            if len(S[1]) == 0:
                return S[0]
            if sym == "+":
                n = float(S[0]) + float(S[1])
            if sym == "-":
                n = float(S[0]) - float(S[1])
            if sym == "x":
                n = float(S[0]) * float(S[1])
            if sym == ":":
                if float(S[1]) == 0:
                    n = 0
                else:
                    n = float(S[0]) / float(S[1])
            return str(n)
    return R

def Click(n):
    global R
    if n == 0: # wortel
        R = Eval(R)
        t = float(R)
        if t < 0:
            m = 0
        else:
            m = math.sqrt(t)
        R = str(m)
    if n == 1: # kwadraat
        R = Eval(R)
        t = float(R)
        m = t*t
        R = str(m)
    if n == 2: # delen
        R = Eval(R)+":"
    if n == 3: # vermenigvuldigen
        R = Eval(R)+"x"
    if n == 4: # 7
        if R == "0":
            R = ""
        R += "7"
    if n == 5: # 8
        if R == "0":
            R = ""
        R += "8"
    if n == 6: # 9
        if R == "0":
            R = ""
        R += "9"
    if n == 7: # aftrekken
        R = Eval(R)+"-"
    if n == 8: # 4
        if R == "0":
            R = ""
        R += "4"
    if n == 9: # 5
        if R == "0":
            R = ""
        R += "5"
    if n == 10: # 6
        if R == "0":
            R = ""
        R += "6"
    if n == 11: # optellen
        R = Eval(R)+"+"
    if n == 12: # 1
        if R == "0":
            R = ""
        R += "1"
    if n == 13: # 2
        if R == "0":
            R = ""
        R += "2"
    if n == 14: # 3
        if R == "0":
            R = ""
        R += "3"
    if n == 15: # Enter (Resultaat bekijken)
        R = Eval(R)
    if n == 16: # Clear
        R = "0"
    if n == 17: # 0
        if R == "0":
            R = ""
        R += "0"
    if n == 18: # Del
        lr = len(R)
        R = R[0:lr-1]
        if R == "":
            R = "0"
    if n == 19: # exit
        DestroyButtons()
        return
    text.delete('1.0', tk.END)
    text.insert(tk.INSERT, R+"\n")
    return

def DestroyButtons():
    for y in range(5):
        for x in range (4):
            buttons[y][x].destroy()
    text.destroy()
    root.destroy()
    return

def ShowButtons():
    text.grid(row=0, column=0, columnspan = 4, sticky="nsew")
    #root.grid_rowconfigure(1, weight=1)
    #root.grid_columnconfigure(1, weight=1)
    for yy in range (5):
        y = yy+1
        button_row = []
        for x in range (4):
            color= "light gray"
            nr = 4*yy+x
            button = tk.Button(root, text=TEKSTEN[nr], width=5, height=1, 
                               bg=color, fg="black", borderwidth = 1,
                               font=(FontName, FontSize, 'bold'),
                               command=lambda nr = nr: Click(nr))
            button.grid(row=y, column=x, sticky="nsew")
            button_row.append(button)
        buttons.append(button_row)

    root.grid_rowconfigure(6, weight=1)
    root.grid_columnconfigure(4, weight=1)
    return
 
FontName = 'Verdana'
FontSize = '18'
root = tk.Tk()
text = tk.Text(root, height = 1, width = 18, font = (FontName, FontSize, 'bold'))
TEKSTEN = [" wortel "," kwad ","÷","×", "7","8","9","-", "4","5","6","+", 
           "1","2","3","=", "Clear","0","Del","eXit"]
R = "0"

buttons = []
ShowButtons()

root.mainloop()

 

#Terug naar boven
import math
import numpy
import tkinter as tk
import random
import sys
root = tk.Tk()
button = tk.Button(root, text="Exit", width=4, height=1, bg="light gray", 
                    fg="black", borderwidth = 1,
                    font=('Helvetica', '32', 'bold'),
                    command=lambda root=root: root.destroy())
button.grid(row=0, column=0, sticky="nsew")
root.grid_rowconfigure(1, weight=1)
root.grid_columnconfigure(1, weight=1)
root.mainloop()

Programmacode bij opdracht 2

#Rekenmachine v.0.1
import math
import numpy
import tkinter as tk
from tkinter import filedialog
import tkinter as tk

def Eval(R):
    SYM = ["+", "-", "x", ":"]
    for sym in SYM:
        if sym in R:
            S = R.split(sym)
            if len(S[1]) == 0:
                return S[0]
            if sym == "+":
                n = float(S[0]) + float(S[1])
            if sym == "-":
                n = float(S[0]) - float(S[1])
            if sym == "x":
                n = float(S[0]) * float(S[1])
            if sym == ":":
                if float(S[1]) == 0:
                    n = 0
                else:
                    n = float(S[0]) / float(S[1])
            return str(n)
    return R

def Click(nn):
    global R
    n = nn-4
    if n == -4: # log
        R = Eval(R)
    if n == -3: # sin
        R = Eval(R)
    if n == -2: # cos
        R = Eval(R)
    if n == -1: # tan
        R = Eval(R)
    if n == 0: # wortel
        R = Eval(R)
        t = float(R)
        if t < 0:
            m = 0
        else:
            m = math.sqrt(t)
        R = str(m)
    if n == 1: # kwadraat
        R = Eval(R)
        t = float(R)
        m = t*t
        R = str(m)
    if n == 2: # delen
        R = Eval(R)+":"
    if n == 3: # vermenigvuldigen
        R = Eval(R)+"x"
    if n == 4: # 7
        if R == "0":
            R = ""
        R += "7"
    if n == 5: # 8
        if R == "0":
            R = ""
        R += "8"
    if n == 6: # 9
        if R == "0":
            R = ""
        R += "9"
    if n == 7: # aftrekken
        R = Eval(R)+"-"
    if n == 8: # 4
        if R == "0":
            R = ""
        R += "4"
    if n == 9: # 5
        if R == "0":
            R = ""
        R += "5"
    if n == 10: # 6
        if R == "0":
            R = ""
        R += "6"
    if n == 11: # optellen
        R = Eval(R)+"+"
    if n == 12: # 1
        if R == "0":
            R = ""
        R += "1"
    if n == 13: # 2
        if R == "0":
            R = ""
        R += "2"
    if n == 14: # 3
        if R == "0":
            R = ""
        R += "3"
    if n == 15: # Enter (Resultaat bekijken)
        R = Eval(R)
    if n == 16: # Clear
        R = "0"
    if n == 17: # 0
        if R == "0":
            R = ""
        R += "0"
    if n == 18: # Del
        lr = len(R)
        R = R[0:lr-1]
        if R == "":
            R = "0"
    if n == 19: # exit
        DestroyButtons()
        return
    text.delete('1.0', tk.END)
    text.insert(tk.INSERT, R+"\n")
    return

def DestroyButtons():
    for y in range(5):
        for x in range (4):
            buttons[y][x].destroy()
    text.destroy()
    root.destroy()
    return

def ShowButtons():
    text.grid(row=0, column=0, columnspan = 4, sticky="nsew")
    #root.grid_rowconfigure(1, weight=1)
    #root.grid_columnconfigure(1, weight=1)
    for yy in range (6):
        y = yy+1
        button_row = []
        for x in range (4):
            color= "light gray"
            nr = 4*yy+x
            button = tk.Button(root, text=TEKSTEN[nr], width=4, height=1, 
                               bg=color, fg="black", borderwidth = 1,
                               font=(FontName, FontSize, 'bold'),
                               command=lambda nr = nr: Click(nr))
            button.grid(row=y, column=x, sticky="nsew")
            button_row.append(button)
        buttons.append(button_row)

    root.grid_rowconfigure(7, weight=1)
    root.grid_columnconfigure(4, weight=1)
    return
 
FontName = 'Verdana'
FontSize = '14'
root = tk.Tk()
text = tk.Text(root, height = 1, width = 16, font = 
    (FontName, FontSize, 'bold'))
TEKSTEN = ["exp","sin","cos","tan", "inv","kwad",":","x", "7","8","9","-",
            "4","5","6","+", "1","2","3","=", "Clear","0","Del","eXit"]
R = "0"

buttons = []
ShowButtons()

root.mainloop()

Programmacode bij Opdracht 4

#Rekenmachine v.0.1
import math
import numpy
import tkinter as tk
from tkinter import filedialog
import tkinter as tk

def Eval(R):
    SYM = ["+", "-", "x", ":"]
    for sym in SYM:
        if sym in R:
            S = R.split(sym)
            if len(S[1]) == 0:
                return S[0]
            if sym == "+":
                n = float(S[0]) + float(S[1])
            if sym == "-":
                n = float(S[0]) - float(S[1])
            if sym == "x":
                n = float(S[0]) * float(S[1])
            if sym == ":":
                if float(S[1]) == 0:
                    n = 0
                else:
                    n = float(S[0]) / float(S[1])
            return str(n)
    return R

def Click(nn):
    global R
    n = nn-4
    if n == -4: # log
        R = Eval(R)
    if n == -3: # sin
        R = Eval(R)
    if n == -2: # cos
        R = Eval(R)
    if n == -1: # tan
        R = Eval(R)
    if n == 0: # wortel
        R = Eval(R)
        t = float(R)
        if t < 0:
            m = 0
        else:
            m = math.sqrt(t)
        R = str(m)
    if n == 1: # kwadraat
        R = Eval(R)
        t = float(R)
        m = t*t
        R = str(m)
    if n == 2: # delen
        R = Eval(R)+":"
    if n == 3: # vermenigvuldigen
        R = Eval(R)+"x"
    if n == 4: # 7
        if R == "0":
            R = ""
        R += "7"
    if n == 5: # 8
        if R == "0":
            R = ""
        R += "8"
    if n == 6: # 9
        if R == "0":
            R = ""
        R += "9"
    if n == 7: # aftrekken
        R = Eval(R)+"-"
    if n == 8: # 4
        if R == "0":
            R = ""
        R += "4"
    if n == 9: # 5
        if R == "0":
            R = ""
        R += "5"
    if n == 10: # 6
        if R == "0":
            R = ""
        R += "6"
    if n == 11: # optellen
        R = Eval(R)+"+"
    if n == 12: # 1
        if R == "0":
            R = ""
        R += "1"
    if n == 13: # 2
        if R == "0":
            R = ""
        R += "2"
    if n == 14: # 3
        if R == "0":
            R = ""
        R += "3"
    if n == 15: # Enter (Resultaat bekijken)
        R = Eval(R)
    if n == 16: # Clear
        R = "0"
    if n == 17: # 0
        if R == "0":
            R = ""
        R += "0"
    if n == 18: # Del
        lr = len(R)
        R = R[0:lr-1]
        if R == "":
            R = "0"
    if n == 19: # exit
        DestroyButtons()
        return
    text.delete('1.0', tk.END)
    text.insert(tk.INSERT, R+"\n")
    return

def DestroyButtons():
    for y in range(5):
        for x in range (4):
            buttons[y][x].destroy()
    text.destroy()
    root.destroy()
    return

def ShowButtons():
    text.grid(row=0, column=0, columnspan = 4, sticky="nsew")
    #root.grid_rowconfigure(1, weight=1)
    #root.grid_columnconfigure(1, weight=1)
    for yy in range (6):
        y = yy+1
        button_row = []
        for x in range (4):
            color= "light gray"
            nr = 4*yy+x
            button = tk.Button(root, text=TEKSTEN[nr], width=4, height=1, 
                               bg=color, fg="black", borderwidth = 1,
                               font=(FontName, FontSize, 'bold'),
                               command=lambda nr = nr: Click(nr))
            button.grid(row=y, column=x, sticky="nsew")
            button_row.append(button)
        buttons.append(button_row)

    root.grid_rowconfigure(7, weight=1)
    root.grid_columnconfigure(4, weight=1)
    return
 
FontName = 'Verdana'
FontSize = '14'
root = tk.Tk()
text = tk.Text(root, height = 1, width = 16, font = 
    (FontName, FontSize, 'bold'))
TEKSTEN = ["exp","sin","cos","tan", "inv","kwad",":","x", "7","8","9","-",
            "4","5","6","+", "1","2","3","=", "Clear","0","Del","eXit"]
R = "0"

buttons = []
ShowButtons()

root.mainloop()

Programmacode bij Opdracht 5

#Rekenmachine v.0.1
import math
import tkinter as tk

def Eval(R):
    sgn = ""
    if len(R) > 0 and R[0] == "-":  # Haal min teken van eerste getal af
        R = R[1:]
        sgn = "-"
    if len(R) > 0 and not R[0].isdigit(): #R[0] moet een digit zijn
        R = "Error"
        return R
                                                                         
    SYM = ["+", "-", "x", ":"]
    for sym in SYM:
        if sym in R: # Controleer operatie
            S = R.split(sym)
            s0 = float(sgn + S[0])
   
            if len(S[1]) == 0:
                result = str(s0)
            else:
                s1 = float(S[1])
                if sym == "+":
                    result = str(s0 + s1)
                if sym == "-":
                    result = str(s0 - s1)
                if sym == "x":
                    result = str(s0 * s1)
                if sym == ":":
                    if s1 == 0:
                        result = "Error"
                    else:
                        result = str(s0/s1)
            return result
    return sgn+R

def Click(nr):
    global R  
    nr = nr-4
    ev = Eval(R)
    if "Error" in ev:
        if  nr  in [16,18]:
            R = ""
            ev = ""
        text.configure(state = "normal") 
              # Er kan alleen met de toetsen worden gewerkt
        text.delete("1.0", tk.END)
        text.insert(tk.INSERT,ev)
        text.configure(state = "disabled")          
        return
    
    if nr == -4: # log
        R = Eval(R)
    if nr == -3: # sin
        R = Eval(R)        
    if nr == -2: # cos
        R = Eval(R)
    if nr == -1: # tan
        R = Eval(R)
    lr = len(R)
    if nr == 0 and lr > 0: # wortel
        R = ev
        n = float(R)
        if n < 0:
            R = "Error"
            return
        else:
            m = math.sqrt(n)
            R = str(m) 
    
    if nr == 1 and lr > 0 : # kwadraat
        R = ev
        n = float(R)
        m = n*n
        R = str(m)   
    if nr == 2: # Delen
        R = ev + ":"
    if nr == 3: # Vermenigvuldigen
        R = ev + "x"
    if nr in range(4,7): # 7, 8 en 9
         R += str(nr + 3)
    if nr == 7: # Aftrekken
        R = ev + "-"  
    if nr in range(8,11): # 4, 5 en 6
        R += str(nr - 4)
    if nr == 11: # Optellen
        R = ev + "+" 
    if nr in range(12,15): # 1, 2 en 3
        R += str(nr - 11)
    if nr == 15: # Enter (Resultaat bekijken)
        R = ev
    if nr == 16: # Clear
        R = ""
    if nr == 17: # 0
        R += str(0)
    if nr == 18: # Del
        lr = len(R)
        if lr > 0:
            R = R[0:lr-1]
    if nr == 19: # exit
        DestroyButtons()
        return
    
    text.configure(state = "normal") 
          # Er kan alleen met de toetsen worden gewerkt
    text.delete("1.0", tk.END)
    text.insert(tk.INSERT, R)
    text.configure(state = "disabled")
    return

def DestroyButtons():
    for y in range(5):
        for x in range (4):
            buttons[y][x].destroy()
    text.destroy()
    root.destroy()
    return

def ShowButtons():
    text.grid(row=0, column=0, columnspan = 3, sticky="nsew")
    button = tk.Button(root, text="eXit", width=3, height=1, 
                               bg=color, fg="black", borderwidth = 1,
                               font=(FontName, FontSize, "bold"),
                               command=lambda root=root: DestroyButtons())
    button.grid(row=0, column=3, sticky="nsew")
    #root.grid_rowconfigure(1, weight=1)
    #root.grid_columnconfigure(1, weight=1)
    for yy in range (6):
        y = yy+1
        button_row = []
        for x in range (4):
            nr = 4*yy+x
            button = tk.Button(root, text=TEKSTEN[nr], width=3, height=1, 
                               bg=color, fg="black", borderwidth = 1,
                               font=(FontName, FontSize, "bold"),
                               command=lambda nr = nr: Click(nr))
            button.grid(row=y, column=x, sticky="nsew")
            button_row.append(button)
        buttons.append(button_row)

    root.grid_rowconfigure(7, weight=1)
    root.grid_columnconfigure(4, weight=1)
    return
 
color= "light gray"
FontName = "Verdana"
FontSize = "14"
root = tk.Tk()
text = tk.Text(root, height = 1, width = 16, font = 
   (FontName, FontSize, "bold"))
TEKSTEN = ["exp","sin","cos","tan", "inv","kwad",":","x", "7","8","9","-",
            "4","5","6","+", "1","2","3","=", "Clear","0","Del","."]
R = ""

buttons = []
ShowButtons()

root.mainloop()

Opmerking: na de aanpassing die in dit stuk code is gemaakt, zit er een kleine onhandigheid in het programma: zodra de "error" op het scherm gekomen is, werkt de "eXit" knop niet meer. Pas nadat je op "Clear" hebt gedrukt, werkt die knop weer.