Mein erstes Interface/ Taschenrechner

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Rayano
User
Beiträge: 22
Registriert: Freitag 7. Juli 2023, 09:21

ich habe ein problem. Ich soll einen Taschenrechner bauen. ich habe auch schon einiges an code. Aber 3 Sachen funktionieren leider noch nicht.

1. Ich habe eine Funktion geschrieben die von Dezimal in andere Zahlen system Umrechnet. Leider habe ich es noch nicht geschaft diese einzubinden.

2. Der Rand an dem ich das Fenster vergrößere ist sehr schwer zu greifen. Ich habe leider keine Möglichkeit gefunden diesen griffiger zu machen.

3. Das ausrechnen der Grundrechenarten funktion leider auch nicht.

Was ich bereits gemacht habe: neben google habe ich in verschiedene Fachbücher nach einer lösung gesucht bin aber leider bisher nicht fündig geworden.

Code: Alles auswählen

from tkinter import *
from tkinter import font
dezimalzahl = 0
basis = 0
ascii = []
#erstellen des Fensters und Festsetzen von schriftgröße und Art
root = Tk()
root.configure(bg="black",borderwidth=10)

font_general = font.Font(size=20, family="Arial")

#erstellen des Ausgabefensters
ausgabe = Entry(root, font=font_general)
ausgabe.grid(row=0, column=0,columnspan=5, sticky="nswe")

#Funktion um etwas einzugeben
def adddisplay(char):
    ausgabe.insert(END,char)

#Funktion zu Läschen der Anzeige
def clear_ausgabe():
    ausgabe.delete(0, END)

#Funktion für die Grundrechenarten
def ausrechnen():
    gleich = eval(ausgabe.get())
    ausgabe.delete(0,END)
    ausgabe.insert(0,str(gleich))

def umrechnungsvariable():
    dezimalzahl = ausgabe.get()
    print(dezimalzahl)
    return

def umrechnungsvariable2():
    basis = ausgabe.get()
    print(basis)
    return

def dezimal_zu_anderer_basis(dezimalzahl,basis):
    while dezimalzahl >0:
        rechnung = int(((dezimalzahl / basis) - int(dezimalzahl / basis)) * basis)
        #              (     (35 / 2)         -     (34 /2)     )         *   2
        if rechnung >10:
            ascii.append(chr(rechnung + 55))
        else:
            ascii.append(str(rechnung))
        dezimalzahl = int(dezimalzahl / basis)
    ascii.reverse()
    ergebnis = "".join(ascii)
    return ergebnis

#Ziffern 0-9
taste1 = Button(root, text = "1",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("1"))
taste2 = Button(root, text = "2",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("2"))
taste3 = Button(root, text = "3",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("3"))
taste4 = Button(root, text = "4",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("4"))
taste5 = Button(root, text = "5",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("5"))
taste6 = Button(root, text = "6",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("6"))
taste7 = Button(root, text = "7",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("7"))
taste8 = Button(root, text = "8",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("8"))
taste9 = Button(root, text = "9",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("9"))
taste0 = Button(root, text = "0",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("0"))
#Grundrechenarten
taste_addition = Button (root, text = "+",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("+"))
taste_subtraktion = Button(root, text = "-",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("-"))
taste_division = Button(root, text = ":",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("/"))
taste_multiplikation = Button(root, text = "X",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("*"))

#Ergebnistaste und umrechnung in andere Basis
taste_umrechnung = Button(root, text = "U",bg="#000000",fg="#FFFFFF",font=font_general,command=umrechnungsvariable)
taste_gleich = Button(root,text ="=",bg="#000000", fg="#FFFFFF",font=font_general,command=ausgabe)

#Punkt und Anzeigefeld löschen
taste_punkt = Button(root, text = ".",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("."))
taste_löschen = Button(root,text ="Del",bg="#000000",fg="#FFFFFF",font=font_general,command=clear_ausgabe)
taste_klammaauf = Button(root,text ="(",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("("))
taste_klammazu = Button(root,text =")",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay(")"))
taste_basis = Button(root,text ="B",bg="#000000",fg="#FFFFFF",font=font_general,command=umrechnungsvariable2)
taste_ergebnis = Button(root,text ="Ergebnis",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:dezimal_zu_anderer_basis(dezimalzahl,basis))
#Aufbau richtet sich nach dem GUI
taste7.grid(row=1, column=0, sticky="nswe")
taste8.grid(row=1, column=1, sticky="nswe")
taste9.grid(row=1, column=2, sticky="nswe")
taste_multiplikation.grid(row=1,column=3, sticky="nswe")
taste_division.grid(row=1, column=4, sticky="nswe")

taste4.grid(row=2, column=0, sticky="nswe")
taste5.grid(row=2, column=1, sticky="nswe")
taste6.grid(row=2, column=2, sticky="nswe")
taste_subtraktion.grid(row=2, column=3, sticky="nswe")
taste_addition.grid(row=2, column=4, sticky="nswe")

taste1.grid(row=3, column=0, sticky="nswe")
taste2.grid(row=3, column=1, sticky="nswe")
taste3.grid(row=3, column=2, sticky="nswe")
taste_umrechnung.grid(row=3, column=3, sticky="nswe")
taste_gleich.grid(row=3, column=4, sticky="nswe")

taste_punkt.grid(row=4, column=0, sticky="nswe")
taste0.grid(row=4, column=1, sticky="nswe")
taste_löschen.grid(row=4, column=4, sticky="nswe")
taste_klammaauf.grid(row=4, column=2, sticky="nswe")
taste_klammazu.grid(row=4, column=3, sticky="nswe")

taste_basis.grid(row=5, column=0, sticky="nwes")
taste_ergebnis.grid(row=5, column=1, sticky="nwes")

#Anpassen der Größe an das Fenster
for column in range(5):
    root.columnconfigure(column, weight=1)
for row in range(6):
    root.rowconfigure(row, weight=1)
root.mainloop()

print(dezimalzahl)
Sirius3
User
Beiträge: 17781
Registriert: Sonntag 21. Oktober 2012, 17:20

Da hast Du Dir ein sehr schwieriges Thema ausgesucht, zumal Dir noch einige Grundlagen zu fehlen scheinen. GUIs sind mit das schwierigste zu programmieren.
*-Importe darf man nicht verwenden, weil sie unmöglich machen, herauszufinden, woher welcher Name stammt. Globale Variablen haben in einem sauberen Programm nichts zu suchen, vor allem nicht bei GUIs, wo der Programmablauf eh schon schwierig zu durchschauen ist.
`eval` darf man nicht benutzen. Eine saubere Fehlerbehandlung, die bei Dir noch fehlt, ist damit eh nicht machbar.
`dezimalzahl` und `basis` werden mit 0 initialisiert, aber nicht benutzt.
`ascii` ist eine globale Liste, die, falls Du sie verwenden würdest, zu Fehlern führen würde.
Für END benutzt Du die von tk zur Verfügung gestellten Konstante, für "nswe" dagegen nicht? Warum?

Globale Variablen vermeidet man, indem man für die GUI eine Klasse definiert.
Variablennamen nummeriert man nicht durch, den vielen identischen Code zum Erzeugen der Knöpfe würde man besser durch Schleifen und eine passende Datenstruktur ersetzen.
Das `Ausgabefensters` ist in Wirklichkeit ein Eingabefeld. Kommentar, die falsch sind, verwirren mehr, als dass sie helfen.
Das Hauptprogramm steht in einer Funktion, die man üblicherweise `main` nennt.
Statt lambda benutzt man hier functools.partial.
Ein einsames `return` am Ende einer Funktion hat keine Wirkung und kann weg.
`dezimal_zu_anderer_basis` gibt etwas zurück, wird aber ignoriert, weil eine GUI mit dem Rückgabewert einer Rückruffunktion nichts anfangen kann.
Wenn man eh nur Ganzzahlrechnung benutzen möchte, benutzt man die Ganzzahldivision //. Dass ascii nicht in der Funktion definiert wird, hatte ich ja schon oben erwähnt. Die Operation, die Du bei `rechnung` ausführst, ist fehlerbehaftet, weil float-Zahlen nicht exakt sind, kann es sein, dass falsch gerundet wird. Richtig wäre

Code: Alles auswählen

ziffer = dezimalzahl - dezimalzahl // basis * basis
wobei `rechnung` hier durch den besseren Namen `ziffer` ersetzt wurde, und dezimalzahl eigentlich einfach zahl ist, denn welche interne Repräsentation wirklich verwendet wird (mit großer Wahrscheinlichkeit irgendwas zur Basis 2) ist nich relevant. Noch besser wäre es, gleich den Modulo-Operator zu verwenden.
Die magische Zahl 55 sollte erklärt werden, oder besser erst gar nicht verwenden.
Hier fehlt auch noch die Fehlerbehandlung, welche Werte sind für Basis erlaubt, was passiert bei 0 oder negativen Zahlen? Was bei Kommazahlen?

Das Ergebnis einer Rechnung `gleich` zu nennen, ist sehr gewöhnungsbedürftig. So arbeiten auch handelsübliche Taschenrechner gar nicht? Oder hast Du schon einmal einen gesehen, wo man ganze Formeln eingeben kann? Viel zu leicht tippt man da Unsinn ein. Es ist auch komisch, dass man zwar X drückt, aber ein * erscheint.

Das ganze könnte dann so aussehen (wobei die wesentliche Funktionalität noch fehlt):

Code: Alles auswählen

import tkinter as tk
from functools import partial

BASIS_ZIFFERN = "0123456789ABCDEFGHIJKLMNOPQRTSTUVWXYZ"

def zahl_zu_basis(zahl, basis):
    ergebnis = []
    while zahl > 0:
        zahl, ziffer = divmod(zahl, basis)
        ergebnis.append(BASIS_ZIFFERN[ziffer])
    return "".join(reversed(ergebnis))


class Taschenrechner:
    TASTEN = [
        ["7", "8", "9", "÷", "×"],
        ["4", "5", "6", "−", "+"],
        ["1", "2", "3", "U", "="],
        [".", "0", "∁", "(", ")"],
        ["B", "Ergebnis"],
    ]

    def __init__(self):
        self.root = tk.Tk()
        self.root.configure(bg="black",borderwidth=10)
        self.zahl = 0
        self.basis = 2
        font_general = tk.font.Font(size=20, family="Arial")
        style = dict(
            bg="#000000",
            fg="#FFFFFF",
            font=font_general,
        )

        self.ausgabe = tk.Entry(self.root, font=font_general)
        self.ausgabe.grid(row=0, column=0,columnspan=5, sticky=tk.NSEW)
        for row_index, tasten in enumerate(self.TASTEN, 1):
            for column_index, text in enumerate(tasten):
                taste = tk.Button(self.root, text=text, command=partial(self.add_display, text))
                taste.grid(row=row_index, column=column_index, sticky=tk.NSEW)
        for column in range(5):
            self.root.columnconfigure(column, weight=1)
        for row in range(6):
            self.root.rowconfigure(row, weight=1)


    def add_display(self, char):
        if char == "=":
            self.ausrechnen()
        elif char == "∁":
            self.ausgabe.delete(0, tk.END)
        elif char == "U":
            self.umrechnungsvariable()
        elif char == "B":
            self.umrechnungsvariable2()
        elif char == "Ergebnis":
            # TODO: irgendwas mit dem Ergebnis machen
            ergebnis = zahl_zu_basis(self.zahl, self.basis)
        else:
            self.ausgabe.insert(tk.END, char)

    def ausrechnen(self):
        # TODO: die Formel richtig auswerten
        ergebnis = len(self.ausgabe.get())
        self.ausgabe.delete(0, tk.END)
        self.ausgabe.insert(0, str(ergebnis))

    def umrechnungsvariable(self):
        self.zahl = self.ausgabe.get()

    def umrechnungsvariable2(self):
        self.basis = self.ausgabe.get()

def main():
    taschenrechner = Taschenrechner()
    taschenrechner.root.mainloop()

if __name__ == "__main__":
    main()
PS: arbeite mit dem, was das GUI-Rahmenwerk bietet und versuche nicht, mit Tricks daran was zu ändern, das führt nur dazu, dass das nur auf Deinem System reibungslos funktionert, und andere Nutzer unter umständen eine unbrauchbares Fenster vor sich haben.
Rayano
User
Beiträge: 22
Registriert: Freitag 7. Juli 2023, 09:21

Danke für deine Antwort. Leider bin ich noch nicht soweit, das ich mir um den aufbau gedanken mache. Ich bin auch heute mit meinen Trainer ( ich mache gerade eine Vorbereitung auf eine Umschulung) deinen Langen und Ausführlichen Text durchgegangen.

Der Grund warum ich // oder % nicht in meiner Rechnung habe, ist das ich bevor ich mit dem Programm angefangen habe noch nicht in andere Zahlensystem umgerechnet habe. Daher ist meine Rechnung so wie ich sie oben habe schon gewollt, auch wenn sie nicht perfekt ist. Aber Trotz deiner Hilfe hast du leider meine fragen nicht beantwortet.

2. Der Rand an dem ich das Fenster vergrößere ist sehr schwer zu greifen. Ich habe leider keine Möglichkeit gefunden diesen griffiger zu machen.

Ich erarbeite mir meine Kenntnisse schrittweise. Bin an diesem Programm erst seit 2 wochen dran. Ich denke dafür ist es schon ein guter anfang. Richtiges Programmieren werde ich dann sicher in den 2 Jahren Umschulung lernen. Ich bin heute auch einen Schritt weiter gekommen und habe in einen Seperaten Programm es geschaft das ich meine Funktion nutzen kann.

später wenn das Grundgerüst steht und alle Funktionen vom Prinzip her Funktionieren werde ich das Programm auch im Code kürzen, bzw. Übersichtlicher gestallten.

Deinen Post und auch deinen Code habe ich mir aber bereits abgespeichert um das später anzugehen.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich glaube nicht, dass du den Rand so ohne weiteres beeinflussen kannst. Der wird vom window Manager vorgegeben. Theoretisch kann man da natürlich eine klickbare Zone machen & versuchen, dragging in resizing zu Wandeln. Aber das ist zu fortgeschritten, und im Zweifel glitchy.
Sirius3
User
Beiträge: 17781
Registriert: Sonntag 21. Oktober 2012, 17:20

@Rayano: ich habe gar keine richtige Frage gefunden. Bei GUI-Programmierung braucht man eben gewisse Grundlagen, ohne das richtige Grundgerüst hilft es eben nicht, zu versuchen, es irgendwie zum Funktionieren zu bringen. Damit lernst Du nur, wie man es nicht macht.
Wo konkret kommst Du denn mit meinem Grundgerüst nicht weiter?
Rayano
User
Beiträge: 22
Registriert: Freitag 7. Juli 2023, 09:21

So ich habe jetzt mein Programm fertig und es funktioniert. um mehr geht es aktuell noch nicht.

Code: Alles auswählen

from tkinter import *
from tkinter import font
dezimalzahl = 0
basis = 0
#erstellen des Fensters und Festsetzen von schriftgröße und Art
root = Tk()
root.configure(bg="black",borderwidth=10, relief="sunken")

font_general = font.Font(size=20, family="Arial")

#erstellen des Ausgabefensters
ausgabe = Entry(root, font=font_general)
ausgabe.grid(row=0, column=0,columnspan=5, sticky="nswe")

#Funktion um etwas einzugeben
def adddisplay(char):
    ausgabe.insert(END,char)

#Funktion zu Löschen der Anzeige
def clear_ausgabe():
    ausgabe.delete(0, END)

#Funktion für die Grundrechenarten
def ausrechnen():
    inhalt = ausgabe.get()
    print(inhalt)
    if "u" in inhalt:
        dezimalzahl = int(inhalt.split("u")[0])
        basis =int(inhalt.split("u")[1])
        ende = str(dezimal_zu_anderer_basis(dezimalzahl, basis))
        ausgabe.delete(0, END)
        ausgabe.insert(0, ende.strip())
    else:
        gleich = eval(ausgabe.get())
        ausgabe.delete(0, END)
        ausgabe.insert(0,str(gleich))

#Funktion zum Umrechnen in andere in 33 Zahlensystem
def dezimal_zu_anderer_basis(dezimalzahl,basis):
    ascii = []
    while dezimalzahl >0:
        rechnung = int(((dezimalzahl / basis) - int(dezimalzahl / basis)) * basis)
        #              (     (35 / 2)         -     (34 /2)     )         *   2
        if rechnung >10:
            ascii.append(chr(rechnung + 55))
        else:
            ascii.append(str(rechnung))
        dezimalzahl = int(dezimalzahl / basis)
    ascii.reverse()
    ergebnis = "".join(ascii)
    return ergebnis

#Ziffern 0-9
taste1 = Button(root, text = "1",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("1"))
taste2 = Button(root, text = "2",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("2"))
taste3 = Button(root, text = "3",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("3"))
taste4 = Button(root, text = "4",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("4"))
taste5 = Button(root, text = "5",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("5"))
taste6 = Button(root, text = "6",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("6"))
taste7 = Button(root, text = "7",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("7"))
taste8 = Button(root, text = "8",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("8"))
taste9 = Button(root, text = "9",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("9"))
taste0 = Button(root, text = "0",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("0"))
#Grundrechenarten
taste_addition = Button (root, text = "+",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("+"))
taste_subtraktion = Button(root, text = "-",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("-"))
taste_division = Button(root, text = ":",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("/"))
taste_multiplikation = Button(root, text = "X",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("*"))

#Ergebnistaste und umrechnung in andere Basis
taste_umrechnung = Button(root, text = "U",bg="#000000",fg="#FFFFFF",font=font_general, command=lambda: adddisplay("u"))
taste_gleich = Button(root,text ="=",bg="#000000", fg="#FFFFFF",font=font_general,command=ausrechnen)

#Punkt und Anzeigefeld löschen
taste_punkt = Button(root, text = ".",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("."))
taste_löschen = Button(root,text ="Del",bg="#000000",fg="#FFFFFF",font=font_general,command=clear_ausgabe)
taste_klammaauf = Button(root,text ="(",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay("("))
taste_klammazu = Button(root,text =")",bg="#000000",fg="#FFFFFF",font=font_general,command=lambda:adddisplay(")"))

#Aufbau richtet sich nach dem GUI
taste7.grid(row=1, column=0, sticky="nswe")
taste8.grid(row=1, column=1, sticky="nswe")
taste9.grid(row=1, column=2, sticky="nswe")
taste_multiplikation.grid(row=1,column=3, sticky="nswe")
taste_division.grid(row=1, column=4, sticky="nswe")

taste4.grid(row=2, column=0, sticky="nswe")
taste5.grid(row=2, column=1, sticky="nswe")
taste6.grid(row=2, column=2, sticky="nswe")
taste_subtraktion.grid(row=2, column=3, sticky="nswe")
taste_addition.grid(row=2, column=4, sticky="nswe")

taste1.grid(row=3, column=0, sticky="nswe")
taste2.grid(row=3, column=1, sticky="nswe")
taste3.grid(row=3, column=2, sticky="nswe")
taste_umrechnung.grid(row=3, column=3, sticky="nswe")
taste_gleich.grid(row=3, column=4, sticky="nswe")

taste_punkt.grid(row=4, column=0, sticky="nswe")
taste0.grid(row=4, column=1, sticky="nswe")
taste_löschen.grid(row=4, column=4, sticky="nswe")
taste_klammaauf.grid(row=4, column=2, sticky="nswe")
taste_klammazu.grid(row=4, column=3, sticky="nswe")

#Anpassen der Größe an das Fenster
for column in range(5):
    root.columnconfigure(column, weight=2)
for row in range(6):
    root.rowconfigure(row, weight=2)
root.mainloop()

print(dezimalzahl)
Der Grund warum ich nicht die Modular funktion benutzt habe ist:

Weil ich einen Arbeitsauftrag von meinen Trainer hatte der genau das mir verbietet. Bei diesem Programm ging es nur darum die Grundlagen zu lernen. nicht mehr. Ich wollte von mir aus ein Interface haben. Ich habe es mir mit schleifen angeschaut und finde es für mich als Anfänger ersteinmal unübersichtlich. Die Strucktur die ich für mich gewählt habe wir mir auch in einigen Jahren noch helfen den Code nachzuvollziehen.

Aber Grundsätzlich denke ich: "Viele wege führen nach Rom, so ist es auch in der Programmierung."
Sirius3
User
Beiträge: 17781
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn Du wirklich die Grundlagen lernen willst, dann mach das auch. Du lernst gerade, wie man mit Kraut und Rüben und viel Raten was hinbekommt, was den Anschein hat, als ob es funktionieren würde.

Du rutscht gerade auf Knien nach Rom.
Benutzeravatar
__blackjack__
User
Beiträge: 13163
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Rayano: Erst mal waren da durchaus Sachen dabei die Du problemlos umsetzen können solltest. Zum Beispiel das *weg lassen* von unnötigen, weil nicht verwendeten Variablen. Und den Sternchen-Import hättest Du auch leicht entfernen können. Genau so das Verwenden von Konstanten für Zeichenketten mit besonderer Bedeutung als Argumente für Tk/`tkinter`.

Nicht so weit zu sein sich über den Programmaufbau Gedanken zu machen ist auch sehr komisch, denn darüber macht man sich ja vorher Gedanken. Nachher nützt das nichts mehr wirklich etwas, es sei denn man möchte immer alle Programme zweimal schreiben. Einmal ohne Gedanken über den Aufbau, und dann danach noch mal mit einem durchdachten Aufbau.

Schrittweise lernen heisst bei GUI-Programmen, dass man die nicht schreibt, bevor man in dem Schritt davor objektorientierte Programmierung gelernt hat, denn das braucht man für eine GUI, das ist der Schritt auf den das aufbaut und in dem Schritt wird das angewendet, und es kommt mit GUIs die ereignisbasierte Programmierung als neues Thema dazu.

Ich kann mir nicht wirklich vorstellen, dass die Modulo-Operation verboten wurde. Ganzzahlige Division mit Rest kommt ziemlich früh im Mathematikunterricht, noch *vor* Dezimalbrüchen und der ”normalen” Division. Dann müsste ja mindestens Division auch nicht erlaubt sein in dem Programm.

Was noch nicht erwähnt wurde: Die Mischung von Deutsch und Englisch, teilweise so weitgehend das sogar im gleichen Namen „Denglisch“ verwendet wurde. Entscheide Dich für eine Sprache. Am besten Englisch, weil auch die Programmiersprache und alle anderen Bibliotheken das verwenden.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten